Siphashは、短いメッセージの速度のために最適化された擬似ランダム機能(PRF)のファミリーです。これは、参照CコードのSifash:ポータブル、シンプルで、明確さとデバッグのために最適化されています。
Siphashは2012年にJean-Philippe AumassonとDaniel J. Bernsteinによって、ハッシュフローディングDOS攻撃に対する防御として設計されました。
サイファッシュは次のとおりです。
普遍的なハッシュに基づくMacなど、以前の暗号化アルゴリズムよりも短いメッセージでよりシンプルかつ高速です。
FHHASHなどの不安定な非暗号化アルゴリズムとのパフォーマンスの競争。
暗号化された暗号化プロジェクトによる複数の暗号化プロジェクトにもかかわらず、暗号化の兆候はありません。
OSS(Linux Kernel、OpenBSD、FreeBSD、Freertos)、言語(Perl、Python、Rubyなど)、ライブラリ(OpenSSL libcrypto、ナトリウムなど)およびアプリケーション(Wireguard、Redisなど)に統合されたバトルテスト。
安全な擬似ランダム関数(別名キー付きハッシュ関数)として、Siphashは安全なメッセージ認証コード(MAC)としても使用できます。しかし、Siphashは、Blake3やSHA-3などの汎用のキーレスハッシュ関数の意味でのハッシュではありません。したがって、Siphashは、安全にするために常に秘密の鍵で使用する必要があります。
デフォルトのサイファッシュはSiphash-2-4です。128ビットキーが必要であり、2つの圧縮ラウンド、4つのファイナライゼーションラウンドを行い、64ビットタグを返します。
バリアントは、異なる数のラウンドを使用できます。たとえば、 Siphash-4-8を保守的なバージョンとして提案しました。
次のバージョンは論文では説明されていませんが、アプリケーションのニーズを満たすために設計および分析されました。
Siphash-128は、64ビットではなく128ビットタグを返します。指定されたラウンド数のバージョンは、Siphash-2-4-128、Siphash4-8-128などです。
Halfsiphashは、64ビットの代わりに32ビットの単語で動作し、64ビットキーを使用し、32ビットまたは64ビットのタグを返します。たとえば、Halfsiphash-2-4-32には2つの圧縮ラウンド、4つのファイナライゼーションラウンドがあり、32ビットタグを返します。
(半) c≥2およびd≥4のサイファシュ-C -Dは、同じキーと出力サイズの任意の関数の最大PRFセキュリティを提供すると予想されます。
標準のPRFセキュリティ目標により、攻撃者は、攻撃者が適応的に選択したメッセージに吸い上げの出力にアクセスできます。
セキュリティはキーサイズ(Siphashの128ビット)によって制限されているため、2秒のキーを検索する攻撃者は、Siphashキーを見つけるチャンス2 s -128になります。セキュリティも出力サイズによって制限されます。特に、SiphashがMacとして使用される場合、 Tがそのタグのビットサイズである場合、2秒のタグを盲目的に試している攻撃者が確率2 s -tで成功します。
ランニング
makeテストを作成します
./ test64テストベクトルを検証します
./ debug同じことを行い、中間値を印刷します。
このコードは、コンパイル時にcROUNDSまたはdROUNDSを定義することにより、 C圧縮ラウンドとDファイナライゼーションラウンドを備えたSiphashのバージョンであるSiphash -C -Dを実装するために適合させることができます。これは、以下のような多くのコンパイラに-Dコマンドライン引数を使用して実行できます。
gcc -Wall --std=c99 -DcROUNDS=2 -DdROUNDS=4 siphash.c halfsiphash.c test.c -o test makefile 、パラメーターとしてCおよびDラウンド値も取得します。
make cROUNDS=2 dROUNDS=4明らかに、ラウンド数が変更された場合、テストベクトルは確認されません。
このコードは、著作権(c)2014-2023 Jean-Philippe Aumasson、Daniel J. Bernsteinです。マルチライセンスの下にあります