web-dev-qa-db-ja.com

対称、非対称、ハッシュ、メッセージ認証コード暗号の現実的で最も安全な暗号は何ですか?

2011年にこの2つの質問を更新することに興味があります。

  1. 低電力のデバイス(携帯電話など)に最も適しているが、それでも効果的な暗号はどれですか。

  2. .NET開発者にとって最も安全な暗号は何ですか?

'08年11月 Rasmus Faber 回答 this 同様のスタックオーバーフローの質問とこの回答:

そうは言っても、それらはほとんどのアプリケーションにとって過剰であり、AES-128、RSA(2048ビットキー)、SHA-256およびHMAC(SHA-256)を使用してうまく実行する必要があります。

これらの推奨事項は現在も当てはまりますか?

24

あなたが引用する推奨事項は、やり過ぎです。考慮すべき1つの点は、特定のレベル(たとえば、キーサイズやハッシュ関数の出力サイズ)を超えると、すべての関数が「予見可能なテクノロジーでは解読不可能」であり、それらを比較するのが少し難しいことです。 SHA-512がSHA-256よりも「より堅牢」であると述べることは、SHA-256が壊れている可能性があることを想像していることを意味します。 、私たちが持つことができる技術を想像することは危険です; 40年前、誰も今日のようにインターネットを想像していませんでしたが、ほとんどの人は2010年までに私たちは全員飛行機を運転するだろうと思っていました)。

AES-128はすでに十分に安全で安価です(AES-256は14ラウンドを使用しますが、AES-128は10ラウンドを使用します)。

現在最大の壊れたRSA鍵は768ビットのモジュラスであり、いくらかの多大な労力を要しました(4年、そして本当に大きな頭脳)。 1024ビットの鍵は短期間のセキュリティに使用できると見なされていますが、より大きな鍵を推奨します。 2048ビットの鍵が適切です。 2倍の大きさのキーを使用すると、署名または復号化の作業が8倍多くなるため、無理をしないようにします。 RSAキーの長さがセキュリティにどのように関係するかについての調査については、 このサイト を参照してください。

256ビットカーブ上のECDSAは、「アンブレイカブル」レベルのセキュリティ(つまり、128ビットキーを使用するAESまたは衝突に対するSHA-256とほぼ同じレベル)をすでに達成しています。素体には楕円曲線、バイナリ体には曲線があることに注意してください。どの種類が最も効率的かは、関連するハードウェアに依存します(同様のサイズの曲線の場合、PCは素数フィールドの曲線を優先しますが、専用ハードウェアはバイナリフィールドで構築する方が簡単です [〜#〜] clmul [〜#〜] 新しいIntelおよびAMDプロセッサの命令により、変更される場合があります)。

SHA-512は64ビット操作を使用します。これはPCでは高速ですが、スマートカードではそれほど高速ではありません。多くの場合、SHA-256は小さなハードウェア(ホームルーターやスマートフォンなどの32ビットアーキテクチャを含む)の方がお得です。

現在、安価なRFIDシステムは低電力であり、上記のいずれも使用できません(言い換えれば、RFIDシステムは可能な限り安価ではありません)。 RFIDシステムは依然として、しばしば疑わしいセキュリティのカスタムアルゴリズムを使用しています。一方、携帯電話は、AESまたはRSAで適切な暗号化を実行するのに十分なCPU能力を備えています(そうです、安価な非スマートフォンでも可能です)。

38
Thomas Pornin

引用されている答えは、.NETの最も安全暗号とは何かに対する私の応答です。

私の推奨(高出力デバイスと低出力デバイスの両方):

  • 対称暗号:AES-128

  • 非対称暗号:2048ビットキーのRSAまたは256ビットキーのECDSA/ECDH

  • ハッシュ:SHA-256

  • メッセージ認証コード:SHA-256を備えたHMAC

  • ストリーム暗号:CTRモードのAES-128

11
Rasmus Faber

セキュリティの面では、これらの推奨事項はまだ有効であり、私がするのと同じです。

非対称暗号の場合は、暗号化、鍵交換、および署名という3つの点に注意する必要があります。 ECDSAは特に署名ですが、RSAは暗号化スキームと署名スキームの両方にすることができます。ただし、暗号化と鍵交換の楕円曲線バージョンもあります(ただし、パブリックドメインの内容はわかりません)。つまり、パラメーターのサイズは3つとも同じです。

他の唯一の要点は、SHA-256/512が間もなく置き換えられることですが、この場合「まもなく」は2012年になります。

低出力に関しては、それは本当に低出力の方法に依存します。携帯電話といえば、スマートフォンの場合、これらすべてが適切です。スマートカード、RFID、センサーネットワークなどの場合は別の話です。また、ほとんどの低出力アルゴリズムは標準ライブラリにはありません。しかし、私は「過剰過ぎない」最後の文のパラメータサイズに向けてあなたを導きます。

6
PulpSpy

2030年までのセキュリティのために、NISTに精通している人々は、少なくともSHA-224、RSAまたはDSAには2048ビット、224ビットEDCSA、およびAES-128または3キートリプルDESの使用を推奨しています。

彼らの研究に基づいて、2010年末の時点で、米国政府はこれらのアルゴリズムを非推奨にしています。SHA-1、1024ビットRSAまたはDSA、160ビットECDSA(楕円曲線)、80/112ビット2TDEA(2つのキートリプルDES) )

詳細については、この投稿とそれが参照するNISTドキュメントを参照してください。 http://securitymusings.com/article/1587/algorithm-and-key-length-deprecation

6
nealmcb

Cryptographic Right Answers Colin Percivalによる2009年の記事は、まだかなり最新のIMHOであり、質問などをカバーしています。

5
Bruno Rohée

対称暗号の場合、AES-256のキースケジュールに弱点がある可能性があるため、AES-256ではなくAES-128を使用する方がよい場合があります。 http://www.schneier.com/blog/archives/2009/ 07/another_new_aes.html

2
Justin Clarke

私たちが行ったのは、いくつかの暗号化およびハッシュ方式を選択し、すべての出力を共通の16進形式に変換することです。最も機密性の高いデータはSHA-256とDES-3を使用していますが、簡単に推測できる機密性の低いデータはMD5とRC4を使用しており、いくつかの目的でストレートXOR変換も使用しています。各対称暗号には独自のパスワードがあり、すべての暗号化されたデータはチェックサムでキーイングされます。すべてを1つの暗号化に依存するのは危険です。

0
Dave