Paranoid プロジェクトは、公開鍵、デジタル署名、一般的な擬似乱数などの暗号アーティファクトに対する既知の脆弱性をチェックします。このライブラリには、文献で見られる既存研究の実装と最適化が含まれています。既存研究により、これらのアーティファクトの生成が一部のケースで欠陥があることが示されました。以下は、このライブラリが基づいている出版物の一部です。
目標は、Google 内外における暗号のユースケースへの信頼を高めることです。
非対称暗号を扱う場合、暗号アーティファクトは通常、次のいずれかです。
Paranoid を使用すると、あらゆる暗号アーティファクトをテストできますが、その主な動機は、脆弱なサードパーティ製ハードウェアまたはソフトウェアのブラックボックスの使用を検出することです。したがって、ソースコードを検査できない場合でも Paranoid を使用できます(上記の状況3)。
このプロジェクトは、既知の脆弱性だけでなく未知の脆弱性の検出も目指しています。例えば、プログラミングエラーや脆弱な独自乱数生成器の使用によって引き起こされる脆弱性を特定しようとします。新しい脆弱性の検出は、もちろん既知の脆弱性の検出よりもはるかに困難です。そのような検出には、大規模なアーティファクトのセットが必要になる場合や、低い確率でしか脆弱なものを見つけられない場合があります。
そのため、私たちはフィードバックを受け取り、脆弱な暗号アーティファクトを生成した暗号ライブラリについて知ることに非常に関心があります(コントリビューションの呼びかけ を参照)。このプロジェクトは常に進行中です。脆弱な実装について学んだ後は、それらを対象とした分析と検出の追加を行う予定です。
現在実装されているチェックのドキュメントは docs にあります。ドキュメントは今後、さらに多くの内容が追加される予定です。
チェックの使用方法については、examples フォルダまたはユニットテスト(*test.py ファイル)を参照してください。examples はさまざまな暗号アーティファクトのテスト方法を示しています。
リポジトリをクローンします:
$ git clone https://github.com/google/paranoid_crypto.git && cd paranoid_crypto
注記: 以下のコマンドは Debian 安定版(bookworm)でテストされています。python3.11 以降を使用していることを確認してください。
依存関係をインストールします:
$ sudo apt update && sudo apt install python3 python3-full python3-pip python3-pybind11 python3-fpylll python3-gmpy2 protobuf-compiler
仮想環境を作成してアクティベートします:
$ python3 -m venv --system-site-packages ~/paranoid-venv
$ source ~/paranoid-venv/bin/activate
注記: 内容を理解している場合は、代わりに次のステップに進んで、pip に --break-system-packages スイッチを使用してもかまいません。
paranoid_crypto Python パッケージをインストールします:
$ python3 -m pip install .
インストールが成功したかどうかを確認するには、ユニットテストを実行できます。例:
$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 314.660s
OK
あるいは、コンテナで実行したい場合は、以下に示すように提供されている Dockerfile を使用できます。
注記: docker がインストールされていることを確認してください。
リポジトリをクローンした後、docker イメージをビルドします:
$ docker build -t paranoid-img .
コンテナを作成して起動します:
$ docker run --name paranoid-container -it paranoid-img
paranoid-user@6191368b26b8:~$
インストールが成功したかどうかを確認するには、ユニットテストを実行できます。例:
paranoid-user@6191368b26b8:~$ cd paranoid_crypto && python3 -m unittest discover -b -p "*test.py"
.................................................................................................................................................................................................................................................................................................................
----------------------------------------------------------------------
Ran 305 tests in 307.555s
OK
他の公表された研究と同様に、私たちは Certificate Transparency (CT) から暗号アーティファクトを分析してきました。CT は、発行されたウェブサイト証明書を透明かつ検証可能にすることを目的として 2013 年から記録しています。そのデータベースには、2022年9月時点で70億以上の証明書が含まれています。Paranoid による EC 公開鍵と ECDSA 署名のチェックでは、これまでのところ CT に脆弱なアーティファクトは見つかっていません。重大度が high または critical の RSA 公開鍵チェックについては、以下の結果が得られています:
これらの証明書の一部は、すでに期限切れまたは失効していました。まだ有効だったもの(CheckGCD のものが大半)については、失効させるために直ちに認証局に報告しました。
このライブラリは Google セキュリティチームのメンバーによって開発・保守されていますが、公式にサポートされている Google 製品ではありません。貢献したい場合は、CONTRIBUTING をお読みの上、プルリクエストを送ってください。バグの報告や機能リクエストも受け付けています。
研究で Paranoid を使用する場合は、以下の BibTeX を使用して引用できます:
@software{Barbosa_Bleichenbacher_Paranoid_Crypto_2022,
author = {Barbosa, Pedro and Bleichenbacher, Daniel},
license = {Apache-2.0},
month = {8},
title = {{Paranoid Crypto}},
url = {https://github.com/google/paranoid_crypto},
year = {2022}
}
| テスト名 | 関連する可能性のあるCVE | 重大度 | 脆弱なアーティファクト数 |
|---|
| CheckOpensslDenylist | CVE-2008-0166 | SEVERITY_CRITICAL | 3989 |
| CheckROCA | CVE-2017-15361 | SEVERITY_HIGH | 2875 |
| CheckGCD | - | SEVERITY_CRITICAL | 1860 |
| CheckFermat | CVE-2022-26320 | SEVERITY_CRITICAL | 36 |
| CheckContinuedFractions | - | SEVERITY_CRITICAL | 16 |
| CheckBitPatterns | - | SEVERITY_CRITICAL | 6 |
| CheckPermutedBitPatterns | - | SEVERITY_CRITICAL | 6 |
| CheckKeypairDenylist | CVE-2021-41117 | SEVERITY_CRITICAL | 4 |
| CheckPollardpm1 | - | SEVERITY_CRITICAL | 1 |