セキュアなデータは、最新のテストおよび計測システムにとって重要です。このガイドでは、暗号技術の概念を紹介し、FIPSおよび規制環境向けの実用的なガイダンスとともに、NI LabVIEWアプリケーションで暗号化、セキュアな通信、静止データ保護、およびキー管理を実装する方法を示します。
暗号技術は、データを保護するために、今日、かつてないほど重要になっています。テストシステムにおいても、通信およびストレージの両方でテストデータを保護するための暗号技術を考慮する必要があります。システムが侵害された場合、悪意のあるアクターがアクセスした場合、または内部のアクターが意図せずデータを意図された用途の範囲外で利用可能にした場合でも、暗号化によってデータを保護できます。暗号化を含むデータ保護は、企業の知的財産の保護、顧客データの保護、またはセキュリティ規制の遵守のために重要です。
このドキュメントでは、LabVIEW環境での暗号技術に関する実用的なガイドを提供します。このドキュメントは、暗号技術の経験がないエンジニア向けに作成されています。
暗号技術は、暗号化、ハッシュ、デジタル署名、キー交換などのデータ保護技術を含む幅広い分野です。
暗号化は、データをキーでロックする操作に似ています。プレーンテキストは暗号化前のテキストで、キーなしでも読み取ることができます。暗号文は暗号化後のテキストで、暗号化を解除するキーを持つユーザのみがアクセスできます。
デジタル暗号化では、キーはプレーンテキストのビットを符号化して暗号文に変換するために使用する文字のセットです。キーがあれば誰でもデータをロック解除できるため、キーは保護する必要があります。暗号化アルゴリズムは、暗号化データのロックを解除するキーの不注意な共有を克服することはできません。データを保護するために、新しいキーを生成して古いキーを無効にする「キーのローテーション」が頻繁に行われます。
ハッシュは一方向変換です。データビットの集合を、異なる入力で重複する可能性が極めて低い固定長ダイジェストに変換します。これは、ソースデータの整合性を検証するために使用されます。暗号化とは異なり、ハッシュを元のソースデータに戻すことはできません。
デジタル署名は、プライベートキーを使用して、データのハッシュに基づいて暗号署名を生成します。署名はドキュメントと一緒に送信されます。受信者は、送信者のパブリックキーを使用して署名を検証し、ドキュメントが署名されてから変更されていないことを確認します。
このセクションでは、暗号化の仕組みについて説明します。詳細については、JKIの「LabVIEWでの簡単なXOR暗号化」を参照してください。
暗号化は、XOR関数で最下位レベルから開始されます。XORの数学的プロパティは固有で、データが移動しても情報の損失がありません。XOR関数は、出力の半分がTRUEで、半分がFALSEであるため固有です。
表1:XOR真理値表
また、XORには、関数を介してデータを両方向に移動できる結合性と可換性があります。つまり、データはXORを介して処理され、その後、元のデータを復元するために再処理されます。
これらのプロパティを使用して、メッセージをキーに対してXORして、暗号化されたメッセージを生成することができます。XORおよび同じキーを使用して、暗号化されたメッセージを元のメッセージに復元できます。
暗号化にXORを使用すると、以下のすべての条件が満たされる場合に解読不可能なコードを作成できます。
これには課題があります。キーの長さがメッセージの長さと同じであることは合理的ではありません。特に、送信開始前にメッセージの長さが不明な場合は注意が必要です。また、現代のシステムでは、繰り返し部分のない真にランダムなキーを生成することは困難です。
キーの長さの問題を克服するために、既知の開始点に基づいて任意の長さのキーを生成するアルゴリズムが使用されます。アルゴリズムの開始点はランダムに生成され、送信者と受信者の間で共有されます。同じシードとアルゴリズムを使用して、受信者は同じシードとアルゴリズムを使用して送信者によって生成された同じキーを生成できます。
図1に示すLabVIEWプログラムは、ガウスホワイトノイズ発生器を使用した概念を示します。このパターンはランダムに見え、多くのランダム性テストに合格し、初期シードが分かっている場合は完全に再現可能であるため、擬似ランダムです。
図1:LabVIEWでの擬似乱数パターンの生成
上記のコードでは、同じシードを使用するか、異なるシードを使用するかを選択できます。同じシードを使用すると、図2に示すように、同じ「ランダム」パターンが生成されます。
図2: 擬似ランダムホワイトガウスノイズ生成
送信者と受信者の両方がシードとアルゴリズムを知っている場合、メッセージと同じサイズのキーを送信せずにキーを再作成できます。
したがって、暗号化メッセージの送信は、シードとアルゴリズムを使用してキーを生成し、生成されたキーの文字を使用してメッセージの各文字に対してXORを実行するという2つの部分から構成されています。
パスワードはキーではないことに注意してください。キーはパスワードから生成されます。パスワードは、キー派生関数 (KDF) と呼ばれるプロセスを使用して、強力な固定長の暗号キーに変換されます。パスワードは短く、予測可能で、可変長であり、多くの場合は脆弱です。KDFはパスワードを、正確なサイズで高いランダム性を持ち、一貫した形式のものに変換します。
キーは、暗号的にセキュアなランダムソースから生成する必要があります。通常、アプリケーションによって生成されたランダム性ではなく、オペレーティングシステムのランダム発生器を使用する必要があります。OS乱数発生器は、キーボードタイミング、マウスの動き、CPUジッタ、および通常アプリケーションでは使用されないその他の測定など、さまざまなソースから乱数を生成します。
図3に示すように、KDFはパスワードに「ソルト」を追加します。ソルトは、2つの同じパスワードが2つの大きく異なるキーを生成するため、攻撃者がキーを推測するのを防ぎます。
図3: キーを生成するためにKDFによってパスワードに追加されたソルト
ユーザが暗号化で遭遇するアルゴリズムには、KDF用と実際の暗号化用のものがあります。どちらも、暗号化されたデータのセキュリティを確保するために重要です。
キーは固定長ですが、メッセージは可変長です。ほとんどの暗号化アルゴリズムでは、メッセージはキーと同じサイズのチャンクに分割されます。その後、キーはメッセージの各セクションに繰り返し適用され、データが暗号化されます。
セキュリティはアルゴリズムとキーの長さの両方に依存します。通常、キーが長いほど、ブルートフォース攻撃に対する耐性が向上します。使用する最小長は、使用する暗号化のタイプ、データの機密性、および予想されるデータの寿命によって異なります。今日のAES暗号化で一般的に使用される128ビットキーは、データを安全に保つための最小長とみなされます。機密性の高いデータや寿命の長いデータにはAES-256が適していますが、多くのアプリケーションではAES-128が承認済みで安全です。AES-256は既知の量子攻撃に対して耐性があると考えられていますが、今後の暗号規格は進化し続けます。
研究者たちは、さまざまな暗号化アルゴリズムを開発してきましたが、それぞれに利点と欠点があります。暗号化アルゴリズムには、対称と非対称の2つの主要なカテゴリがあります。
対称アルゴリズムは、データの暗号化と復号化の両方に同じキーを使用します。そのプロセスを図4に示します。
図4:対称暗号化
対称暗号化は操作がシンプルなため、非対称暗号化よりも高速で効率的です。対称暗号化は、大容量ファイル、ストリーミングデータ、およびリアルタイムテストシステムに最適です。
対称暗号化のセキュリティは、キーの保護に大きく依存します。誰かがキーを取得した場合、すべてを復号化できます。対称キーは、送信者と受信者の両方がキーを持っている必要があり、つまり、キーが受信者に渡される必要があります。場合によっては、これは不可能なため、非対称暗号化が使用されます。
最も一般的な対称暗号化はAESです。キーの長さによって指定されるため、AES-128およびAES-256は使用されるキーの長さによって異なります。ほとんどのアプリケーションでは、特別な理由がない限りAES-256を推奨します。FIPS要件ではAESを使用できます。ChaCha20は、現在一般的に使用されているもう1つの対称暗号化アルゴリズムです。
トランスポート層セキュリティ (TLS) は、非対称暗号化を使用してキーを安全に交換した後、対称暗号化を使用してデータを送信します。最新のシステムでは、TLS 1.2またはTLS 1.3を使用し、SSLおよびそれ以前のバージョンは使用しないでください。これらの新しいTLS実装では通常、AES-GCMまたはChaCha20-Poly1305などの認証済み暗号化アルゴリズムを使用します。
テストシステムのほとんどのデータストレージおよびデータ転送状況では、対称暗号化を使用します。
非対称暗号化は対称暗号化よりも低速であるため、大きなデータには使用されません。通常、インターネット通信、デバイスとサーバ間の接続、および分散システムに使用されます。非対称暗号化では、2つの異なるけれども数学的に関連するキーを使用してデータを暗号化および復号化します。この2つのキーは、共有可能なパブリックキーと秘密に保つ必要があるプライベートキーと呼ばれます。対称暗号化は、2人のユーザが同じキーを使用してロックを解除する金庫のようなものですが、非対称暗号化は、誰でも手紙を投函できる (パブリックキーを使用) が、所有者のみがキーを開けて読み取る (プライベートキーを使用) ことができるスロット付きのメールボックスのようなものです。そのプロセスを図5に示します。
図5:非対称暗号化
パブリックキーは、通常、パブリックキーが本物であることを確認する証明書ファイルと一緒に、オープンに共有されます。プライベートキーは所有者によって秘密にされています。これにより、事前の信頼なしにセキュアな通信が可能になります。暗号化を行う当事者を信頼してキーを共有する必要はありません。
最も一般的な非対称暗号化アルゴリズムはRSAとECCです。RSAは古く、より長いキーを使用しますが、現在でも広く採用されています。2,048以上のRSAキー長が推奨されます。楕円曲線暗号 (ECC) はRSAよりも小さくて高速であり、256ビット以上のキー長を持つ最新のシステムに推奨されます。RSAとECCはFIPS規制で許可されていますが、どちらもポスト量子コンピュータの世界では安全であるとは期待されていません。非対称アルゴリズムは、ポスト量子標準の採用とともに進化します。
ハイブリッド暗号化システムは、今日一般的です。非対称暗号化は、共有キーの確立に使用されます。共有キーは、実際のデータの対称暗号化に使用されます。たとえば、TLSは最初のハンドシェイク中に非対称暗号化を使用し、その後データ転送に対称暗号化 (AES) を使用します。
暗号化は、データを秘密にすることで機密性を保護します。セキュアな転送のもう1つの要素は、ハッシュを使用してデータが変更されていないことを保証することです。
ハッシュ関数は、ファイル、メッセージ、ストリームなどの入力を受け取り、ダイジェストと呼ばれる固定長の出力を生成します。ハッシュダイジェストは、入力データのサイズに関係なく同じ長さであり、データのわずかな変更でまったく異なるハッシュになります。
ハッシュの一般的な用途は、データダウンロードです。送信者はファイルのハッシュを計算し、それを受信者に送信します。受信側はファイルをダウンロードし、ハッシュを計算します。ファイルが変更されていない場合は、ハッシュは同じままです。
ハッシュは、データダウンロード以外のさまざまなケースで使用されます。ハッシュは、ファイルがディスク上で変更されていないことを保証するために使用できるため、アプリケーションはデータが変更されていないことを確信してファイルからデータをインポートできます。ハッシュは、コンピュータまたはOSの構成を確認し、変更があれば起動をブロックして、悪意のあるユーザがコンピュータを改ざんするのを防ぎます。
ハッシュと暗号化を組み合わせることで、システムの安全性が向上します。TLSは、ハッシュを使用してハンドシェイク情報を確認し、交換されたキーがトランザクション中に変更されていないことを確認します。
最も一般的なハッシュアルゴリズムはSHA (通常はSHA256) です。MD5は、ファイルの整合性を検証するためにファイルのダウンロードにも一般的に使用されますが、MD5にはその他の用途にも既知の弱点があります。MD5はFIPS認証されていませんが、SHA256はFIPS認証されています。
暗号化のみでは機密性は保護されますが、データが変更されていないことは保証されません。したがって、最新の暗号システムでは、暗号化と整合性保護を1つの操作にまとめた認証済み暗号化が使用されます。
認証された暗号化アルゴリズムは、認証タグとともに暗号化されたデータを生成します。受信者がデータを復号化すると、認証タグが確認されます。メッセージの一部が変更された場合、復号化は失敗し、変更されたデータは拒否されます。
一般的な認証済み暗号化アルゴリズムには、AES-GCM、AES-CCM、ChaCha20-Poly1305があります。これらのアルゴリズムは機密性と完全性の両方を提供し、TLSを含む最新のプロトコルで広く使用されています。
利用可能な場合は、暗号化とハッシュを別々に組み合わせる古いアプローチよりも、認証された暗号化モードを使用することをお勧めします。これは、正しく実装するのが簡単で、セキュリティの脆弱性のリスクを軽減するためです。
前述の暗号化およびハッシュ技術を使用して、現在使用されているいくつかのセキュアなプロトコルがあります。
TLSはセキュアなネットワーク通信に使用されます。これは、暗号化、認証、およびデータ整合性を組み合わせて、ネットワーク上でセキュアな通信を提供するプロトコルです。これにより、パーティ間で送信されるデータがプライベートで変更されず、正しい受信者に送信されることが保証されます。TLSは、通常AESでデータを暗号化し、ハッシュを使用して改ざんを検出し、証明書でIDを検証します。
SSHは、ネットワークを介してリモートシステムに安全にアクセスするために使用されるプロトコルです。SSHは、SHAなどのハッシュ関数に基づくメッセージ認証コード (MAC) を使用してデータの整合性を確認し、ログイン時にユーザ/サーバのIDを確認します。SSHトランザクションでは、サーバはパブリックキーを提示します。クライアントは通常、初期接続後にサーバパブリックキーを保存し、今後の接続での変更を確認します。その後、クライアントはサーバとキーを交換し、AESまたはChaCha20暗号化を使用してサーバとクライアント間のデータを暗号化します。
ハイパーテキスト転送プロトコルセキュア (HTTPS) は、TLSを使用してクライアントとサーバ間の通信を暗号化および保護するHTTPのバージョンです。HTTPはWebリクエスト内のデータの構造化方法、TLSはそのデータの保護方法です。HTTPSは、今日のWebブラウザで一般的に使用され、Web API、クラウドサービス、および工業用またはテスト用のエンドポイントでも使用されています。
HTTPSを使用しない場合、信頼できないネットワークを介してシステム間でデータが転送されている間に傍受または変更される可能性があります。HTTPSを使用すると、データは暗号化、検証され、改ざんから保護されます。HTTPSはFIPS規制に準拠している場合がありますが、準拠しているとは限りません。これは、プロトコルをサポートするために使用されるTLSスタックによって異なります。
HTTPSはアプリケーション層で動作し、アプリケーションは暗号化を実行します。IPsec (Internet Protocol Security) は、パケットを暗号化および認証することでネットワーク層でネットワーク通信を保護するプロトコルスイートです。IPsecは、アプリケーションが暗号化を処理する必要なしに、システム間のトラフィックを透過的に処理します。
IPsecの例としては、Virtual Private Network (VPN) があります。VPNでは、すべてのネットワークトラフィックは送信時に暗号化され、受信時にクライアントによって復号化されます。アプリケーションソフトウェアは、データが暗号化されていることを認識しません。
2つのシステム間のすべてのデータを暗号化する場合は、IPsecツールを使用します。TLSは、アプリケーションから直接暗号化を制御する場合に使用します。
さまざまな暗号化方法がある中で、どの暗号化を使用する必要がありますか。どのレベルの暗号化で十分ですか。米国政府のアプリケーション向けにこの質問に答えるために、NISTはFIPS 140として知られる連邦情報処理標準 (FIPS) を発行しました。これは現在リビジョン3であるため、FIPS 140-3が最新のガイダンスです。
サプライヤが暗号モジュールを作成すると、そのモジュールはFIPSテストラボでFIPS検証を受けるためにテストされます。この指定のモジュールは、FIPS 140の要件を満たすように個別にテストおよび検証されています。検証済みのモジュールは、NISTコンピュータサイエンスリソースセンターの暗号モジュール検証プログラムページに記載されています。
モジュールは、ソフトウェア暗号化ライブラリまたはハードウェアセキュリティデバイスです。ほとんどのアプリケーションは、暗号化操作をアプリケーションに直接実装するのではなく、これらのFIPS認証済みモジュールに委任します。
FIPS検証プログラムはコストがかかり、時間がかかります。FIPSプログラムは、ChaCha20やBLAKE2などの最新の強力な暗号化アルゴリズムをまだ検証していません。このような理由から、暗号化付き製品を作成するベンダの多くは、FIPS検証済みコンポーネントを再利用可能なため、FIPS検証済みモジュールを作成しません。または、FIPS規制に準拠することがわかっているアルゴリズムを使用する場合もあります。
FIPS準拠の必要性は、セキュリティチームがWindowsコンピュータをFIPSモードに設定することを要求した場合に最もよく発生します。このモードでは、Windowsは、サポートされている暗号化APIを介して、アプリケーションがFIPSで承認されていないアルゴリズムを使用することを制限できます。WindowsはFIPSの検証は行わず、使用されている暗号化技術がFIPS 140プログラムの下で承認されていないものではないことのみをチェックします。たとえば、プログラムがMD5 (セキュアでないことが知られている古いハッシュアルゴリズム) を使用する場合、FIPSモードが有効になっていると、Windowsはそのプログラムの実行をブロックします。
NIST SP 800-171から要件を導出するCMMCプログラムでは、FIPS認証モジュールを介して実装された暗号技術を使用して、制御された未分類情報 (CUI) を保護する必要があります。リモートアクセスセッションは、これらの要件が適用される一般的なシナリオの1つです。
LabVIEW開発者は、ストレージ (静止データ) と転送 (転送データ) の2つの用途で暗号化を使用します。
静止データは、能動的に転送されるのではなく、保存される情報を指します。たとえば、構成ファイル、テスト結果、データベース、ログファイル、キャリブレーションデータ、暗号キーなどです。悪意のあるアクターがストレージデバイス、リムーバブルメディア、またはコピーされたバックアップファイルにアクセスすると、実行中のアプリケーションにアクセスしなくても暗号化されていないデータが読み取られる可能性があります。
すべての保存データに暗号化が必要なわけではありません。以下の情報を保存する際は、暗号化を考慮する必要があります。
多くのアプリケーションでは、Windows BitLockerなどのオペレーティングシステム保護は、ストレージデバイス全体を暗号化することで効果的な防御の第1層を提供します。フルディスク暗号化は、コンピュータやドライブが紛失したり盗難にあったりした場合にデータを保護しますが、システムの実行後に権限のあるユーザやアプリケーションがファイルにアクセスすることを防ぐことはできません。転送中の暗号化は、保存後のデータを保護しません。また、保存中の暗号化は転送中のデータを保護しません。多くのシステムでは両方が必要です。
機密ファイルの場合、アプリケーションはディスクに書き込む前にデータ自体を暗号化する必要がある場合があります。一般的なアプローチには、以下の暗号化タイプがあります。
アプリケーションデータを暗号化する場合は、機密性と整合性の両方が保護されるため、AES-GCMなどの認証済み暗号化アルゴリズムを使用することをお勧めします。暗号化されたファイルが変更されると、アプリケーションはデータを復号化する際にその変更を検出できます。
LabVIEWアプリケーションは通常、以下の形式で情報を保存します。
これらの形式はネイティブ暗号化をほとんど、またはまったく提供しません。保護が必要な場合は、ディスクに書き込む前にデータを暗号化するか、BitLockerなどのオペレーティングシステムツールによって保護された暗号化されたボリューム内に保存してください。
パスワード、証明書、または暗号キーを構成ファイルに直接保存しないでください。保護されたオペレーティングシステムキーストア、対称および非対称、信頼できるプラットフォームモジュール (TPM)、またはCryptProtectDataなどのAPIを使用して、機密データを保護します。
LabVIEWには、下位レベルから上位レベルまで、さまざまなネットワーク通信関数があります。これらの関数のほとんどは、現在暗号化を提供していません。Emersonのエンジニアは現在、これらのネットワーク関数の一部に暗号化機能を追加しようとしており、この機能はLabVIEWの今後のバージョンで発表される予定です。
表2:LabVIEW通信関数
これらの関数に暗号技術は組み込まれていませんが、LabVIEWでデータ送信用に暗号化を実装する方法はいくつかあります。
オプション1:IPsec/VPN
サーバおよびクライアントの両方でVPNを有効にすると、LabVIEWデータを含む2つのマシン間で転送されるすべてのデータが暗号化されます。LabVIEWアプリケーションは、VPN接続について何も知っている必要はありません。すべての暗号化は、クライアントにデータを渡す前にVPNソフトウェアによって処理されます。
VPNとしてWireGuardを推奨します。WireGuardは無料、高速、安全です。WireGuardはWindowsとNI Linux RTの両方でサポートされているため、図6に示すように、リアルタイムデバイスからWindowsシステムにデータを送信するために使用できます。WireGuardはNI Linux RTディストリビューションに含まれています。
図6:WireGuardデータ転送
内部テストでは、WireGuardは高速で構成が簡単です。LabVIEWコードまたはシステムの他の部分を変更する必要はありません。WireGuardクライアントはサーバとクライアントの両方で実行する必要があるため、システムに組み込む前にそれが可能であることを確認してください。
WireGuardはFIPS認証されていません。FIPS検証を含む規制要件を満たす必要がある場合は、FIPS検証済みの他のVPNを使用できます。
オプション2: 暗号化機能を備えたLabVIEW関数を使用
一部のLabVIEW関数には、データ通信関数に暗号化を追加する機能が含まれています。
gRPCを使用してデバイスまたはサービス間でデータ通信を行う場合、TLS暗号化を有効にすることができます。サーバおよびクライアントに対してTLSを構成する必要があります。サーバのX.509証明書を生成する必要があります。LabVIEWでgRPCを使用する詳細については、「NIソフトウェアおよびハードウェアでgRPCを使用する方法」を参照してください。
セキュアFTP (SFTP) 関数を使用する場合は、セキュアFTPサーバを設定する必要があります。LabVIEW関数は、そのサーバからの送受信を許可します。これらの送信は、いくつかの暗号化アルゴリズムをサポートするSSHプロトコルを使用します。使用されるアルゴリズムは、SFTPサーバの構成によって異なります。SFTPサーバは別途インストールする必要があります。LabVIEWでのSFTPの使用については、LabVIEWプログラミングリファレンスマニュアルのSFTPセクションを参照してください。
組込LabVIEW関数はFIPS認証されていませんが、一部の関数はFIPS承認済みアルゴリズムを使用します。FIPSモードを有効にしても、Windowsはこれらをブロックしません。
LabVIEW関数は、送信されるデータパッケージを暗号化しません。このような場合は、他のオプションの1つを使用する必要があります。
オプション3:他社の暗号化ツールキットを使用
Encryption Compendium for LabVIEWは、LVSツールから入手でき、LabVIEW用の暗号化関数の完全なライブラリを提供します。図7にスクリーンショットを示します。このツールキットは、NIツールネットワークまたはLVSツールから直接入手できます。
Encryption Compendiumは、対称暗号化とRSA非対称暗号化の両方をサポートしています。また、ハッシュや、TLS、DTLS、SSHなどのLabVIEWの多くのセキュアなプロトコルもサポートしています。データを暗号化し、暗号化された形式で保存できるだけでなく、さまざまなプロトコルの1つで安全にデータを送信できます。
図7:Encryption Compendiumパレット
Encryption Compendiumは、暗号化のタスクを1つのVIに削減する高レベル関数を提供します。たとえば、図8に示すように、対称暗号化VIは任意の暗号化アルゴリズムを使用してデータを暗号化します。
図8:Encryption Compendiumの対称暗号化関数
図9のコードに示すように、1つの関数が復号化をサポートします。
図9:Encryption Compendiumの対称復号化関数
Encryption Compendiumは、他のさまざまな暗号化関数とセキュアなプロトコルをサポートしています。図10の例は、LabVIEWでX.509キーを生成する方法を示しています。
図10:Encryption Compendium X.509証明書生成
Encryption CompendiumはFIPSで検証されていませんが、FIPSとの互換性は2026年後半に予定されています。
LVS Tools Encryption Compendiumの詳細
オプション4:LabVIEW以外の暗号化モジュールを呼び出す
強力な最新の暗号技術を提供する、一般的なプログラミング用の多くの暗号化モジュールがあります。これらは、LabVIEWコミュニティで提供されているラッパーとともにLabVIEWで使用できます。FIPS 140標準に含まれていない暗号化アルゴリズムを使用しますが、同等以上のセキュリティを提供します。
Bouncy Castleは、さまざまな暗号化関数を提供するオープンソースの暗号化ライブラリです。図11に示すように、ハッシュの生成、キーと証明書の作成、データの暗号化を行うことができます。LabVIEWユーザは、Bouncy Castle関数用のオープンソースラッパーを作成しました。さらに、これらのLabVIEWラッパーを使用するためのチュートリアルもあります。
図11:Cannon Controls Bouncy Castleラッパーを使用した暗号化と復号化
オプション5:FIPSで検証された暗号化モジュールを呼び出す
FIPS認証済み暗号化をLabVIEWで直接実行することはできませんが、FIPS認証済みモジュールを使用するいくつかのオプションがあります。これらのモジュールは、CMMC認証に必要な米国政府の規制情報を扱うための要件に準拠しています。
CryptProtectData (およびCryptUnprotectData) はadvapi32.dllにあります。これらの関数は、パスワード、キー、構成などのシークレットの保存に使用できます。これらの関数の使用については、Windowsのドキュメントを参照してください。データをバイト配列として渡す必要があります。関数にデータを送信する前に、LabVIEWアプリケーションでDATA_BLOBストラクチャを定義する必要もあります。また、この関数を呼び出すには、LabVIEWでのデータポインタの受け渡しに精通している必要があります。
BCrypt APIは、bcrypt.dllのWindows APIです。これは、AES対称暗号化、ハッシュ、キー導出などの一般的な暗号化タスク用のWindowsの主要な最新暗号化APIです。
これらの関数は、正しく呼び出されると、FIPSで検証されたアルゴリズムを呼び出して規制に準拠します。
キーは暗号システムの重要な要素です。誰かがキーを持っている場合、そのキーが保護するすべてのものにアクセスできます。キーの共有は、悪意のあるアクターが保護されたシステムに侵入できるようにする一般的な方法です。キーの紛失は、データへのアクセスを失う一般的な方法です。
LabVIEWプログラムで情報を暗号化または復号化する必要がある場合は、キーを処理する必要があります。LabVIEW VIにキーをハードコーディングしないでください。ハッカーが簡単にアクセスできるようになります。PCのプレーンテキストファイルにキーを保存しないでください。プライベートリポジトリであっても、ソースコードリポジトリに暗号キー、パスワード、または証明書を保存しないでください。
Windowsでは、ローカルキーをセキュアな環境に保存できます。Microsoft Secret Storeは、PowerShellを使用してローカルマシンにキーを安全に保存および取得する方法です。LabVIEWからMicrosoft Secret Storeにアクセスするためのオープンソースライブラリは、https://gitlab.com/cannontim/secret-store-apiから入手できます。
LabVIEWでライブラリ呼び出しノードを使用して、CryptProtectData関数を使用してキーを保存することもできます。
セキュアな環境では、HSMを考慮する必要がある場合があります。これらのハードウェアデバイスは、暗号化、復号化、およびデジタル署名操作を実行しながら、暗号キーを安全に生成、保存、管理する専用の改ざん防止デバイスです。HSMは小規模なアプリケーションには過剰ですが、規制要件を満たす必要のある大規模なアプリケーションにはこれらのデバイスが必要になる場合があります。
HSMは、開発者のチームをサポートする大規模で高価なネットワークデバイスから、単一の開発者向けの小型でポータブルなUSBデバイスまで多岐にわたります。コンピュータに内蔵されているものもあります。トラステッドプラットフォームモジュール (TPM) は、PCがセキュアブートやネットワーク認証などの操作のキー管理に使用する特定のタイプのHSMです。
HSMには通常、LabVIEWなどのアプリケーションがキー管理機能にアクセスできるAPIがあります。
暗号化は、最新のテストと測定システムを保護するための基本的な機能ですが、完全に適切に設計されたセキュリティアーキテクチャの一部として実装された場合にのみ有効です。このドキュメントでは、暗号化の仕組みだけでなく、実際のLabVIEWシステムで転送中および保存中のデータを保護する方法についても説明しました。
暗号化は、AES、RSA、SHAなどのアルゴリズムの組み合わせと、TLS、SSH、IPsecなどのプロトコル、キー、およびキー管理方法に依存します。これらの各コンポーネントは重要な役割を果たしますが、システム全体のセキュリティは、個々のテクノロジに依存するのではなく、それらの組み合わせと実装方法に大きく依存します。
LabVIEWは、エンジニアがコードを機能的な計測アプリケーションとして視覚化するためのグラフィカルなアプローチを提供します。このドキュメントのガイダンスを使用すると、これらのアプリケーションで生成するデータを保護して、テストシステムの機密性と整合性を確保できます。
| A | B | A+B |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 1 | 0 |
WindowsおよびBitlockerはMicrosoftグループの商標です。登録商標Linux®は、全世界における商標保持者Linus Torvalds氏から排他的ライセンスを受けているLMI (Linux Mark Institute) からの許諾により使用しています。
| 機能 | 機能 | 暗号化 |
|---|---|---|
| TCP | 低損失、ハンドシェイクデータ交換 | なし |
| UDP | 高速データブロードキャスト、損失 | なし |
| ネットワークストリーム | TCPベースの上位ロスレス通信。タイプセーフ。 | なし |
| シェア変数 | LabVIEW VI間の上位通信 | なし |
| DataSocket | レガシーデータ通信 | なし |
| HTTPセキュリティ | LabVIEW HTTPクライアントとNI Webサービス間のセキュアな通信。 | 認証と整合性のためにリクエストに署名し、データを暗号化しない |
| WebDAV | HTTP/HTTPSによるリアルタイムシステムとのファイル転送。NIハードウェアマネージャでターゲットの構成のWebDAV用HTTPSを有効にします。 | HTTPS (TLS) |
| SFTP | FTPサーバを介したセキュアなFTPファイル転送。SSHプロトコルを使用して暗号化します。 | SFTPサーバに依存 |
| SSH | リモートシステムとのSSHセッション用にSSHコマンドを開く | AES、ChaCha20、その他 |
| Webサービス | RESTful API、HTTP/HTTPSを介してデータを提供する | HTTPS、SSL/TLS、認証、アクセス制御 |
| gRPC | 高性能/低レイテンシ通信サービス | TLS暗号化 |