List of ecdsa - Baldanders.info
tag:Baldanders.info,2006-07-15:/tags
2006-07-15T16:13:23+09:00
バルトアンデルスは連続的な怪物,時間の怪物である。(ホルヘ・ルイス・ボルヘス 『幻獣辞典』より)
https://baldanders.info/images/avatar.jpg
https://baldanders.info/images/avatar.jpg
「安全な鍵長の下限」とは
tag:Baldanders.info,2006-07-15:/blog/000210/
2006-07-15T07:13:23+00:00
2006-07-15T07:13:23+00:00
「安全な鍵長の下限」とは
Spiegel
/profile/
<p>
先日書いた
<a href="https://baldanders.info/blog/000204/">「暗号の危殆化と新しいアルゴリズム」</a>
で署名・暗号に使う鍵の長さについて少しだけ言及しましたが,
(私が断定的に書いてしまったのが悪いのかもしれませんが)その部分だけ注目している方もいるようです。
そこで今回は暗号鍵のサイズについてもう少し細かく見ていくことにしましょう。
</p><p>
暗号アルゴリズムの危殆化(compromise)要因には色々あるのですが,
大まかに以下の3つに集約できると思います。
(<a href="http://www.ipa.go.jp/security/fy15/reports/crypt_requirement/index.html">「将来の暗号技術に関する安全性要件調査」</a>より引用)
</p><ol>
<li>暗号アルゴリズムの脆弱性(設計上の瑕疵など)</li>
<li>攻撃法の進歩(既存攻撃法の改良、新たな攻撃法の開発)</li>
<li>計算機性能の向上(解読計算能力の増大)</li>
</ol><p>
例えば<a href="https://baldanders.info/blog/000204/">前回</a>紹介した SHA-1 への攻略法は上記の1番目の要因に相当します。
もし1番目および2番目の要因がないとするなら,
3番目の要因を取り除くためには鍵のビット長を大きくすればいいことに気がつきます。
鍵のビット長を大きくすればそれだけ試行回数が増えるため解読に時間がかかることになるからです。
</p>
<div id="a000210more"><div id="more">
<p>
さて,
ここからは IPA/ISEC の
<a href="http://www.ipa.go.jp/security/fy15/reports/crypt_requirement/index.html">「将来の暗号技術に関する安全性要件調査」</a>
を見ながら説明していきましょう。
</p><p>
解読に時間がかかるといっても無限の時間をかければいつかは解読できるわけで,
そうなるとどれだけの時間をかければ安全といえるのかということになります。
<a href="http://www.ipa.go.jp/security/fy15/reports/crypt_requirement/index.html">「将来の暗号技術に関する安全性要件調査」</a>
では「1年間の解読計算によって解読される確率が0.1%未満である」ことを以って安全としているようです。
これは言い換えると「解読計算を1000年間行っても,鍵空間が探索し尽くせない」ことを意味します。
</p><p>
また解読計算を行うには膨大な計算リソースが必要になります。
今後ともムーアの法則(「計算機性能は同一コストで18ヶ月で2倍になる」という法則)が成り立つとしても予算は有限ですので,
調達コストやランニングコストを考えれば計算速度にも上限が存在することになります。
この場合,
予算をどのように見積もるかが鍵になりますが,
<a href="http://www.ipa.go.jp/security/fy15/reports/crypt_requirement/index.html">「将来の暗号技術に関する安全性要件調査」</a>
では以下の4つのケースを想定しています。
</p><div style="margin-left:1em;"><table>
<tbody><tr><td style="text-align:right;">中規模予算:</td><td style="text-align:left;">1000万ドル(約10億円)</td></tr>
<tr><td style="text-align:right;">大規模予算:</td><td style="text-align:left;">100億ドル(約1兆円)</td></tr>
<tr><td style="text-align:right;">超大規模予算:</td><td style="text-align:left;">経済規模最大国の GDP の4% (国防予算にほぼ匹敵)</td></tr>
<tr><td style="text-align:right;">限界規模予算:</td><td style="text-align:left;">世界の年間 GDP</td></tr>
</tbody></table></div><p>
なお,
計算機性能の向上には物理的な限界があると考えられていますが(つまりいつかはムーアの法則は破られる),
その限界点についての議論も行われているようです。
それによると,
クロック速度の相対論的限界はあと10の9乗(ビット換算で30ビット)程度,
集積度の量子論的限界もあと10の9乗(ビット換算で30ビット)程度,
エネルギー面からも1年間の太陽エネルギーを用いて187ビットの鍵空間を探索するのが限界だそうです。
もちろんこれは現在のコンピュータの延長として考えた場合の話で,
例えば量子コンピュータが実用化されるなど画期的な技術革新があれば崩れてしまいます。
まぁその場合にはそもそも鍵長による安全性云々という話も成り立たなくなる可能性もありますが。
</p><p>
このように様々な条件を考慮した上で安全な鍵長の下限はどのくらいになるのか調べていきます。
ここでは調べる対象となる暗号アルゴリズムが以下の条件を満たしていると仮定します。
</p><ul>
<li>共通鍵暗号</li>
<li>全数探索(総当り法)よりも効率的な解読法が存在しない</li>
<li>有意性検定のコストは無視できることとする</li>
</ul><p>
これら条件を満たした上で予測される安全な鍵長の下限を以下に挙げます。
(全部は多いので一部だけ)
</p><div style="margin-left:1em;"><table class="solid">
<tbody><tr><th> </th> <th>2003年</th> <th>2006年</th> <th>2010年</th> <th>2016年</th> <th>2018年</th> </tr>
<tr><td style="text-align:right;">対中規模予算攻撃</td> <td style="text-align:right;"> 93</td><td style="text-align:right;"> 95</td><td style="text-align:right;"> 97</td><td style="text-align:right;">100</td><td style="text-align:right;">101</td></tr>
<tr><td style="text-align:right;">対大規模予算攻撃</td> <td style="text-align:right;">103</td><td style="text-align:right;">105</td><td style="text-align:right;">107</td><td style="text-align:right;">110</td><td style="text-align:right;">111</td></tr>
<tr><td style="text-align:right;">対超大規模予算攻撃</td><td style="text-align:right;">108</td><td style="text-align:right;">110</td><td style="text-align:right;">113</td><td style="text-align:right;">116</td><td style="text-align:right;">117</td></tr>
<tr><td style="text-align:right;">対限界規模予算攻撃</td><td style="text-align:right;">114</td><td style="text-align:right;">116</td><td style="text-align:right;">119</td><td style="text-align:right;">122</td><td style="text-align:right;">123</td></tr>
</tbody></table></div><p>
この予測によれは,
今後10年に限れば128ビット程度の鍵長で十分ということになります。
</p><p>
ところで,
日本国外ではどのような評価をしているでしょうか。
軽く調べてみましたが,
これが結構あります。
代表的なものを以下にいくつか挙げてみます。
</p><ul>
<li><a href="http://www.comms.scitech.susx.ac.uk/fft/crypto/ECCFut.pdf">ECC, Future Resiliency and High Security Systems</a> (PDF)</li>
<li><a href="http://www.rsasecurity.com/rsalabs/node.asp?id=2088">A Cost-Based Security Analysis of Symmetric and Asymmetric Key Lengths</a></li>
<li><a href="http://rfc.net/rfc3766.html">RFC3766: Determining Strengths For Public Keys Used For Exchanging Symmetric Keys</a></li>
<li><a href="http://www.ecrypt.eu.org/documents/D.SPA.16-1.0.pdf">ECRYPT Yearly Report on Algorithms and Keysizes (2005)</a> (PDF)</li>
<li><a href="http://csrc.nist.gov/publications/nistpubs/800-57/SP800-57-Part1.pdf">NIST Special Publication 800-57: Recommendation for Key Management - Part 1: General (Revised)</a> (PDF)</li>
</ul><p>
特に欧州の <a href="http://www.ecrypt.eu.org/">ECRYPT (Network of Excellence in Cryptology)</a>による年次報告は各方面の調査結果が並べられていてとても参考になります。
ここではひとつだけ <a href="http://www.nist.gov/">NIST (National Institute of Standards and Technology)</a> SP800-57 における評価結果を紹介したいと思います。
</p><p>
まず鍵の強度について共通鍵暗号と公開鍵暗号とを比較した一覧があります。
</p><div style="margin-left:1em;"><table class="solid">
<tbody><tr> <th>Bits of security</th> <td style="text-align:right;">80</td> <td style="text-align:right;">112</td> <td style="text-align:right;">128</td> <td style="text-align:right;">192</td> <td style="text-align:right;">256</td></tr>
<tr><th>Symmetric key algorithm</th> <td style="text-align:right;">2TDEA</td> <td style="text-align:right;">3TDEA</td><td style="text-align:right;">AES-128</td><td style="text-align:right;">AES-192</td><td style="text-align:right;">AES-256</td></tr>
<tr> <th>FFC (e.g. DSA) L</th> <td style="text-align:right;">1024</td> <td style="text-align:right;">2048</td> <td style="text-align:right;">3072</td> <td style="text-align:right;">7680</td> <td style="text-align:right;">15360</td></tr>
<tr> <th>FFC (e.g. DSA) N</th> <td style="text-align:right;">160</td> <td style="text-align:right;">224</td> <td style="text-align:right;">256</td> <td style="text-align:right;">384</td> <td style="text-align:right;">512</td></tr>
<tr> <th>IFC (e.g. RSA) k</th> <td style="text-align:right;">1024</td> <td style="text-align:right;">2048</td> <td style="text-align:right;">3072</td> <td style="text-align:right;">7680</td> <td style="text-align:right;">15360</td></tr>
<tr> <th>ECC (e.g. ECDSA) f</th><td style="text-align:right;">160-233</td><td style="text-align:right;">224-225</td><td style="text-align:right;">256-383</td><td style="text-align:right;">384-511</td> <td style="text-align:right;">512+</td></tr>
</tbody></table></div><p>
TDEA というのは TripleDES のことです。
DES はかつて共通鍵暗号の標準(FIPS PUB 46-3)でしたが,
標準の座を AES に明け渡して2005年に完全に廃止になりました。
ただし TripleDES については新たに SP800-67 を発行しその中で TDEA (Triple Data Encryption Algorithm)として規格化されています。
</p><p>
同じようにハッシュ関数についても一覧があります。
</p><div style="margin-left:1em;"><table class="solid">
<tbody><tr> <th style="text-align:left;">Bits of security</th><td style="text-align:center;">80</td> <td style="text-align:center;">112</td> <td style="text-align:center;">128</td> <td style="text-align:center;">192</td> <td style="text-align:center;">256</td></tr>
<tr><th style="text-align:left;">Digital Signatures and hash-only applications</th><td>SHA-1, SHA-224, SHA-256, SHA-384, SHA-512</td><td>SHA-224, SHA-256, SHA-384, SHA-512</td> <td>SHA-256, SHA-384, SHA-512</td> <td>SHA-384, SHA-512</td> <td>SHA-512</td></tr>
<tr> <th style="text-align:left;">HMAC</th><td>SHA-1, SHA-224, SHA-256, SHA-384, SHA-512</td><td>SHA-1, SHA-224, SHA-256, SHA-384, SHA-512</td><td>SHA-1, SHA-224, SHA-256, SHA-384, SHA-512</td><td>SHA-224, SHA-256, SHA-384, SHA-512</td><td>SHA-256, SHA-384, SHA-512</td></tr>
<tr> <th style="text-align:left;">Key Derivation Functions</th><td>SHA-1, SHA-224, SHA-256, SHA-384, SHA-512</td><td>SHA-1, SHA-224, SHA-256, SHA-384, SHA-512</td><td>SHA-1, SHA-224, SHA-256, SHA-384, SHA-512</td><td>SHA-224, SHA-256, SHA-384, SHA-512</td><td>SHA-256, SHA-384, SHA-512</td></tr>
<tr> <th style="text-align:left;">Random Number Generation</th><td>SHA-1, SHA-224, SHA-256, SHA-384, SHA-512</td><td>SHA-1, SHA-224, SHA-256, SHA-384, SHA-512</td><td>SHA-1, SHA-224, SHA-256, SHA-384, SHA-512</td><td>SHA-224, SHA-256, SHA-384, SHA-512</td><td>SHA-256, SHA-384, SHA-512</td></tr>
</tbody></table></div><p>
ハッシュ関数の場合,
目的によって要求される強度(ここではハッシュ値のビットサイズ)が異なるためこのような表になっています。
また<a href="https://baldanders.info/blog/000204/">前回</a>述べたように,
SHA-1 は予定の性能を下回ることが指摘されていて,
2010年までに SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)に移行するようにとの<a href="http://csrc.nist.gov/CryptoToolkit/tkhash.html">声明</a>が出されました。
</p><p>
これらを踏まえて実際に安全な鍵長の下限がどの程度か挙げててみます。
</p><div style="margin-left:1em;"><table class="solid">
<tbody><tr> <th>Algorithm security lifetime</th><td>Through 2010<br/>(min. of 80 bits of strength)</td><td>Through 2030<br/>(min. of 112 bits of strength)</td><td>Beyond 2030<br/>(min. of 128 bits of strength)</td></tr>
<tr><th>Symmetric key algorithm<br/>(Encryption and MAC)</th><td>2TDEA, 3TDEA, AES-128, AES-192, AES-256</td> <td>3TDEA, AES-128, AES-192, AES-256</td> <td>AES-128, AES-192, AES-256</td> </tr>
<tr> <th>FFC (e.g. DSA) L</th><td>min.: 1024</td> <td>min.: 2048</td> <td>min.: 3072</td> </tr>
<tr> <th>FFC (e.g. DSA) N</th><td>min.: 160</td> <td>min.: 224</td> <td>min.: 256</td> </tr>
<tr> <th>IFC (e.g. RSA) k</th><td>min.: 1024</td> <td>min.: 2048</td> <td>min.: 3072</td> </tr>
<tr> <th>ECC (e.g. ECDSA) f</th><td>min.: 160</td> <td>min.: 224</td> <td>min.: 256</td> </tr>
</tbody></table></div><p>
先の IPA/ISEC の評価(こちらは2018年までしかないので簡単に比べられませんが)より若干緩い感じですね。
現状では AES-128 よりも強い暗号は必要なさそうです。
共通鍵暗号に関しては他も大体同じような結果になっていますが(ECRYPT の報告は少し厳しいですが),
公開鍵暗号に関しては報告書によってばらつきが大きいため参考程度に留めておくのがいいかもしれません。
パッと見の印象では今回紹介した NIST の報告がバランスが取れていて妥当なところではないでしょうか。
</p><p>
以上で署名・暗号に使う鍵の長さについて大体イメージできたのではないでしょうか。
最初に述べたように暗号の危殆化には様々な要因があり,
「鍵長を大きくしたから安心」というようなものでもありません。
暗号技術を含むシステムを開発・運用している方々は常に技術の最新動向に注意しておく必要があります。
この記事が何らかの手助けになれば幸いです。
</p><p>
参考:
</p><ul>
<li><a href="http://www.ipa.go.jp/security/fy16/reports/crypt_compromize/index.html">暗号の危殆化に関する調査</a></li>
<li><a href="http://www.cryptrec.jp/topics/cryptrec_20060525_c05report.html">CRYPTREC Report 2005の公開</a> (5月に改訂版がリリース)</li>
<li><a href="http://www.atmarkit.co.jp/fsecurity/rensai/crypt05/crypt01.html">デファクトスタンダード暗号技術の大移行 第5回 鍵長をどのように選択していくか~等価安全性と鍵長の関係</a></li>
</ul>
</div></div>