前回の共通鍵暗号の紹介に引き続き、安全性・処理性能ともに優れていると国際的に認められ、米国政府標準暗号、欧州のNESSIEや日本のCRYPTREC(Cryptography Research & Evaluation Committees)での推奨暗号、ISO/IEC国際標準暗号、インターネット標準暗号などで共通して選定されているハッシュ関数・公開鍵暗号・デジタル署名について紹介する。
共通鍵暗号ではアルゴリズムそのものを代替わりさせることによって、より安全でより高速なものへと移行することが可能である。これに対して、ハッシュ関数、公開鍵暗号、デジタル署名ともに、アルゴリズムそのものを代替わりさせるというよりも、基本的にはほぼ同じ構成のままハッシュ長や鍵長を延ばすことによって安全性を高めるといった方が適当である。その結果、安全性向上と引き換えに処理性能の面では一般に劣化することになることに注意されたい。
主なハッシュ関数
第1回でも紹介したように、NISTはSHA-1を2010年末までに米国政府標準規格から外す意向であることをすでにアナウンスしている。実際に、2006年3月15日付けで、SHA-2(SHA-224/SHA-256/SHA-384/SHA-512の総称)を移行先としたハッシュ関数の変更について、以下のような指示を公式に行っている[参考文献1]。
- デジタル署名やタイムスタンプサービスなど、非衝突性の確保が必須のアプリケーションでの利用に際しては、できるだけ早急にSHA-2への移行を実施すること
- それ以外の利用においては原則として2010年末までに移行を実施すること
- 例外的に2010年以降もSHA-1の利用が認められるのは、メッセージ認証子を生成するHMACとしての利用、セッション鍵などの鍵導出関数としての利用、および疑似乱数生成手法としての利用に限られること。ただし、その場合でもできるだけSHA-2を利用することが望ましい
●SHA-224/SHA-256/SHA-384/SHA-512
SHA-256、SHA-384、SHA-512は2002年に、SHA-224は2004年に米国家安全保障局(NSA)が設計し、NISTが規格化した米国政府標準ハッシュ関数(FIPS 180-2[参考文献2])である。ハッシュ長は順に256ビット、384ビット、512ビット、224ビットであり、MD5/SHA-1同様、メッセージ拡張関数と圧縮関数とからなる構造をしている。
この4つのハッシュ関数を区分する場合、ハッシュ長による違いというよりも利用環境でのCPU基本演算系の違いという側面の方が大きい。つまり、32ビット演算系CPUでの利用を前提とする場合にはSHA-224とSHA-256を、64ビット演算系CPUでの利用を前提とする場合にはSHA-384とSHA-512を使うことが想定されている。
また、SHA-224とSHA-384は、(初期ベクトル値は異なるものの)それぞれSHA-256またはSHA-512と同様の演算をした後、それらのハッシュ値の一部(下位32ビットまたは128ビット)を切り捨てる形でハッシュ長を短くしているだけである(図1参照)。従って、処理性能では、SHA-224とSHA-256、SHA-384とSHA-512はほとんど変わらない。
安全性に関して、現時点では脆弱性は発見されていないものの、MD5/SHA-1の設計方法を踏襲している関係から今後のハッシュ関数の研究動向によっては脆弱性が発見される可能性はある。そのため、SHA-1からの移行先として、現時点ではSHA-256(だ円曲線暗号ではSHA-224を含む)の採用だけに限定される可能性がある。
●SHA-1
SHA-1は、1993年に設計されたSHA-0の規格修正版として、1995年にNSAが再設計し、NISTが規格化した米国政府標準ハッシュ関数である。ハッシュ長は160ビットである。
安全性に関しては、2005年2月に初めて衝突を見つける理論的な攻撃論文(攻撃計算量269)が発表され、同8月にはその攻撃方法がさらに改善された(攻撃計算量263)[参考文献3]。現時点では具体的な衝突例が明らかにされているわけではないが、攻撃方法の改善や計算機性能の向上などを考慮すれば、実際のSHA-1の衝突例が近いうちに発表される可能性は十分あると考えられている。
Copyright © ITmedia, Inc. All Rights Reserved.