機能を最適化することは可能ですか?
MD5_Update(&ctx_d, buf, num);
buf
ゼロしか含まれていないことがわかっている場合は?
それとも、これは数学的に不可能ですか?
SHA1についても同様です。
機能を最適化することは可能ですか?
MD5_Update(&ctx_d, buf, num);
buf
ゼロしか含まれていないことがわかっている場合は?
それとも、これは数学的に不可能ですか?
SHA1についても同様です。
ハッシュ関数の入力を制御する場合は、おそらく何らかのエスケープを使用して、すべてゼロの代わりに単純なカウントを使用できます。たとえば、16 進数の 000020 は 32 個のゼロを意味します。(非常に) 基本的な圧縮機能は、MD5 や SHA1 よりもはるかに高速な場合があります。
明らかに、このソリューションは、ハッシュ計算の 1 つ以上のブロックを保存する場合にのみ高速になります。たとえば、入力が使用される前にハッシュ関数によってパディングおよび拡張されるため、3 バイトまたは 16 バイトのどちらをハッシュするかは問題ではありません。
おそらく多少のスピードアップが得られるでしょうが、それは比較的マイナーです。高性能ハッシュにとって最も重要なことは、最適化された実装を選択し、可能な場合は GPU (または FPGA/ASIC) を使用して並列処理を利用することです。
SHA-1 には、固定 IV とメッセージのわずかな違いによる高速化が知られています。そのスピードアップは約 21% です。Ars Technicaを参照してください。
メッセージが完全に固定されていて、IV が可変の場合、同様のスピードアップが得られる可能性があります。しかし、特に非専門家として、これを実装するのは大変な作業です。追加のハードウェアを購入することは、コードを数パーセント高速化するよりもおそらくはるかに安価です。
メッセージの先頭が複数の定数ブロックで構成されている場合は、それらを一度ハッシュして、ハッシュ関数の中間状態をキャッシュできます。あなたの状況に当てはまるかもしれないし、当てはまらないかもしれません。
暗号化ハッシュは、実際には、入力の小さな変化に対して出力に大きな変化をもたらすと考えられています。 http://en.wikipedia.org/wiki/Avalanche_effectを参照してください。ハッシュされたデータと、事前にゼロが埋め込まれたハッシュされたデータとの間の関係を探しているようです。設計上、入力のこの変更は、明確に関連していない出力を生成する必要があります。
編集:あなたの質問に直接答えるには、設計上、「鍵または平文の小さな変更により、暗号文が大幅に変更されるはずです」ということは、数学的に難しいことを意味します。