web-dev-qa-db-ja.com

.Net Coreで「安全な」楕円曲線アルゴリズムを使用するにはどうすればよいですか?

自分が書いているプログラムに独自のデジタル署名操作を組み込むことを考えています。暗号化のニュアンスは少し私を超えています。

このウェブサイト によると、NIST/NSAアルゴリズム(P-224、P-256、P-384)は、私の経験と知識を超えて認められているさまざまな理由から「安全」ではありません。

マイクロソフトは、「Cryptographic Next Generation(CNG)」でP-256、P-384、およびP-521を使用してECCを実装しましたが、チャートにリストされている他の「安全な」アルゴリズムはありません。

私のオプションと最良の選択は何ですか? P-521は他の欠陥を修正しますか?曲線の実装は、数式を関数に変換するのと同じくらい簡単ですか? RSAを使用したほうがいいですか?

1
NonSecwitter

自分が書いているプログラムに独自のデジタル署名操作を組み込むことを考えています。暗号化のニュアンスは少し私を超えています。

Red flag!自分で暗号化を実装しないでください。決して。絶対にしない決して。標準で実績のあるアルゴリズムを使用している場合でも、それらをすべて組み合わせたものであってはなりません。暗号化について非常に深く理解していない限り、自分で実装しようとしないでください。 libsodiumのように、それを抽象化するライブラリを使用します。 自分で暗号を実装しないでください!

私のオプションと最良の選択は何ですか?

Daniel Bernsteinのサイトに安全と記載されているアルゴリズムのいずれも、使用しているシステムでサポートされていない場合は、サポート付きのライブラリを取得するか、自分で曲線を実装する以外に方法はありません。ただし、簡単な検索では ドキュメント が表示されています。これは、リンク先のWebサイトの作成者が設計した安全な曲線であるCurve25519がWindowsでサポートされていることを示しています。

P-521は他の欠陥を修正しますか?

いいえ。P-521は、未知のOriginの定数を使用するという点で他のNIST曲線と似ています。それは大きいので、他の小さな曲線よりも高いセキュリティを提供すると主張しています。あなたが指摘する「欠陥」は非常に理論的なものであることに注意してください。心配は、曲線を弱めるために定数が 意図的に選ばれた だったことです。定数はSHA-1によって生成されたため、弱点は可能な曲線の非常に大きなサブセットが脆弱であり、NSAを通じてNISTがそれを知っていることを示す必要があります。これは可能ですが、ほとんどありません。おそらく、NIST曲線は 完全に良好 です。

数式を関数に変換するのと同じくらい簡単に曲線を実装できますか?

これが.NET Coreで正確にどのように実行できるかわかりません。ただし、スタックオーバーフローで question が表示され、それが実際に可能であることを示しています。それ以上は知りません。

RSAを使用したほうがいいですか?

これは、ユースケースによって異なります。鍵交換に使用している場合は、RSAを使用しないでください。その理由は、RSAは前方秘密性を提供しないのに対し、ECC(NIST曲線でさえ)は提供するからです。 (指定したとおりに)デジタル署名でアルゴリズムを使用している場合は、代わりにRSAにフォールバックしても安全です。しかし、繰り返しになりますが、独自の暗号を実装する必要はありません!

1
forest