私は最近、「政府承認のプロトコル」を使用して「安全なメッセージングアプリケーション」を作成するという研究プロジェクトを任されています(政府は米国です)。私はこれを、非対称暗号化と政府承認の暗号化アルゴリズム、AKA FIPS 140(-1?)、およびハッシュ(FIPS 180-x)を意味すると解釈しています。
Galaxy S4やHTC Oneなどの一部のAndroidデバイスは、FIPS認定済みとして宣伝されています。
アプリケーションレベルのコードは、これらのデバイスで認定された実装を利用できますか?たとえば、標準のAndroid/Java APIを使用してHTTPS接続を開くか、SHA256ハッシュを生成する場合、これらの呼び出しはFIPS認定の実装で行われますか?
その場合:
そうでない場合:
アプリケーションレベルのコードは、これらのデバイスで認定された実装を利用できますか?
はい。安全なシステムのコンポーネントとして、「OpenSSLを使用していますFIPS Object Module 1.2(Validation#1051 awarded 2008-11-17。)」のように主張できます。
つまり、デフォルトのAndroid JCEプロバイダー、正しいですか?
正しい。 Sun/OracleにはFIPS検証済みモジュールがありません。
FIPS認定されたJCEが利用可能であることを確認する方法はありますか?
はい、IBMには1つの「IBM Java JCE 140-2 Cryptographic Module」があります-- FIPS 140-1およびFIPS 140-2ベンダーリスト
FIPS証明可能なアプリを作成するには、最低でもJNIを使用してFIPS認定されたOpenSSL実装、または代替の純粋なJava JCEプロバイダー、正しい?
いいえ。最低でも、アプリケーションには安全な機能の理論があり、アプリケーションが安全なモードで動作するか、機能を停止するという説得力のある正式なセキュリティの議論を行う必要があります。 FIPS検証には多くの特定の要件があり、安全なコンポーネントを使用するだけでは検証の方法のほんの一部を得ることができません。それは、Fararriエンジンをコンパクトに入れてそれを呼び出すようなものです。レースカー。
FIPS認定されたOpenSSL実装を使用すると仮定すると、これは、セキュアネットワークコール(HTTPSなど)をOpenSSL実装を呼び出すネイティブコード(C)で実行するか、またはJNIがOpenSSLライブラリを呼び出すのですか?それは非常に面倒なようです。
それは実際にはそれよりもはるかに悪いです。 FIPS承認の場合、同じハードウェアで実行されている別のアプリケーションがアプリケーションの安全な機能に干渉しないことを示す必要があります。これは、通常、オペレーティングシステムに特定のセキュリティコントロールがあり、ハードウェアがサポートしていることを意味しますOSのセキュリティ制御です。そうです。
あなたの一般的な目的Androidアプリケーションは、Android OS
例 'Galaxy S2およびGalaxy S3で実行されているAndroid Ice Cream Sandwich 4.0'
Androidで動作するFIPS認定されたpure-Java JCEプロバイダーはありますか?オープンソースまたは低コストが望ましいです。
低コストで見つけることはほとんどありません。
私はおそらく同じアルゴリズムを使用してスポンジ城のようなものを使用して進めることができ、うまくいけばプロバイダーを変更するだけでうまくいきます(たとえば、誰かが請求書を処理したい場合)。
いいえ、暗号プロバイダーはセキュリティの議論に不可欠です。本当の仕事は、アプリケーションを作成するのではなく、セキュリティの議論をすることです。
概念を混同しないようにしましょう。承認済みアルゴリズムと承認済み実装があります。
「承認されたアルゴリズム」(またはプロトコル)を使用するには、たとえばSHA-256を使用します。これは数学的に定義された関数です。 SHA-256が1つあります。使用するコードが標準に従ってSHA-256を実装している限り、「承認されたアルゴリズム」を使用しています。
承認されたimplementationは、NISTによって、正当性の定義に対して「正しい」ことが正式に確認されたシステムです。このような検証は長く、費用がかかり、多くの監査と紙を必要とします(ここでは数万ページと数万ドルについて話しています)。オープンソースプロジェクトには、原則として、それを行うための時間も資金も羨望もありません。これは、ある製品を柔軟性のない政府に販売するために認証スタンプを必要とする一部の企業による特定のスポンサーによってのみ発生します。
承認された実装を本当によろしいですか?承認された実装は、同等に認定されているアプリケーション全体の一部として以外は意味をなさないため、これは奇妙に見えます。
「政府承認プロトコル」が必要な場合、要件は、政府によって体系化され、この政府による使用が承認されているアルゴリズムとプロトコルを使用することです。手前に出て、その政府が米国政府であると仮定すると、それは、現在の [〜#〜] nist [〜#〜] 出版物によって指定されたアルゴリズムを使用する必要があることを意味します。
主要な暗号化ビルディングブロックのほとんどは、NISTによって [〜#〜] fips [〜#〜] またはNISTの出版物で指定されており、米国政府製品向けに承認されています。アルゴリズムの便利なリストは、NISTが 検証プログラム を実行するものです。これも:
暗号化を使用する適切に設計された製品のほとんどはこれらのアルゴリズムを使用するため、「政府承認のアルゴリズム」は、非政府組織からの共通の要件です。それは「誰もが知っているような優れた暗号アルゴリズムを使用する」こと以上のことを言っているのではありません。
通信プロトコルは政府によって指定される頻度が低いため、その要件がプロトコルにどのように適用されるかを明確にしたい場合があります。インターネット上のプロトコルの事実上の標準は [〜#〜] rfc [〜#〜] です。
NISTは 暗号化モジュール検証プログラム を実行します。 FIPS 140証明書 は、認定された研究所が実装をテストし、適合していることを証明したことを証明する、米国政府によって発行されたスタンプです。 FIPS 140レベル1(つまりFIPS 140-2レベル1、-2は標準のバージョン))は、いくつかのサンプル値を計算するだけで十分です。それらが正しいことを確認します。より高いレベル(Androidデバイスでは見つかりません))には、いくつかのセキュリティ要件があります。
これらのアルゴリズムの政府承認の実装を使用する必要があると要件で指定されていない限り、実装で特定の証明書を探す必要はありません。 。証明書を取得するには時間と費用がかかるため、一般に、マスマーケット製品のベンダーは面倒なことをします。 NIST Webサイトで 検証済み製品の完全なリスト (またはより正確には modules )を確認できます。
FIPS=証明書を取得する主な理由は、米国政府に販売することです。研究プロジェクトの場合、プロジェクトの目的が以下の場合を除いて、必要になることはほとんどありません。 Androidデバイス自体がFIPS認定されているデバイスを含むシステムを構築します。要求のフレージングを考えると、必要なのは適切なアルゴリズムを使用することだけです)とにかく行う)。