2025/04/18 19:28 15,000 lines of verified cryptography now in Python

ロボ子、今日のITニュースはPythonのハッシュ関数が強化されたという話じゃ。

ハッシュ関数ですか。具体的にはどのような変更があったのでしょう?

2022年11月にSHA3実装の脆弱性が見つかったのがきっかけで、Pythonのハッシュ関連インフラを検証済みのコードで置き換えることになったのじゃ。

脆弱性があったのですね。それで、どうなったのですか?

その結果、Pythonの標準ハッシュやHMACアルゴリズムが、検証済みの暗号ライブラリHACL*によって提供されるようになったのじゃ。ユーザーから見ると、変更は完全に透過的じゃ。

HACL*ですか。初めて聞きました。どのようなライブラリなのですか?

HACL*は、検証済みの暗号ライブラリで、Pythonに必要な機能を実装するために、色々と手を加えたらしいぞ。例えば、Blake2ファミリーの追加モードや、SHA3の新しいAPI、HMACアルゴリズムの最適化などじゃ。

なるほど。ストリーミングAPIというのも気になります。任意の長さの入力を扱えるのですね。

そうじゃ。ストリーミングAPIは、任意の長さの入力をバッファリングして、フルブロックが取得されるとすぐにバッファをフラッシュするのじゃ。このAPIは複雑なインバリアントを持つ長寿命の状態を操作するので、検証が重要になるんじゃな。

以前のSHA3の実装でCVEの影響を受けたのも、ストリーミングAPIの複雑さが原因だったのですね。

その通り! ストリーミングアルゴリズムは検証に適していて、関連する研究論文も発表されているぞ。

依存型を使ってブロックアルゴリズムをキャプチャし、汎用ストリーミング構造を一度検証すれば、そのブロックアルゴリズムのストリーミングAPIを「無料」で作成できるというのは面白いですね。

じゃろ? PythonへのPR提出では、50以上のツールチェーンとアーキテクチャでPythonの完全なビルドを実行するインフラが役立ったらしいぞ。

多くの環境でテストされたのですね。HMACを処理する際に、トリッキーなビルドの問題が発生したとのことですが、具体的にはどのような問題だったのでしょう?

最初の状態を作成する際に問題が発生して、一部の古いコンパイラは、-mavx2が使用されない限り、ヘッダーを処理することを拒否したらしいのじゃ。他にも、F*からCへのコンパイラであるkrmlをオーバーホールする必要があったり、メモリ割り当ての失敗を伝播できるようにする必要があったり、色々と苦労したみたいじゃな。

色々な課題があったのですね。HACL*を更新するには、Pythonのチェックアウトでシェルスクリプトを実行し、PythonのSBOMで予期されるハッシュを調整する必要があるとのことですが、これは自動化されているのでしょうか?

おそらく自動化されていると思うぞ。手動でやるのは大変じゃからな。しかし、今回のアップデートで、Pythonのセキュリティが大幅に向上したのは間違いないのじゃ。

そうですね。それにしても、ハッシュ関数の脆弱性から、これほど大規模な改修が行われるとは驚きです。

まさにピンチはチャンスじゃな! ところでロボ子、HACL*って、なんだかハックルベリー・フィンの冒険に出てくるハックに似てると思わないか?

言われてみれば、そうかもしれませんね。もしかしたら、セキュリティの世界を冒険するハックルベリー・フィンなのかも…しれません!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。