なぜ暗号に登らないのか

暗号アルゴリズムプログラマの重い負担についての興味深いメモの無料翻訳に注目します。 注-そのようなプログラマーを尊重する人の個人的な見解ですが、彼自身は決して暗号化に登ったことはなかったでしょう。



私たちプログラマーは間違いを犯すのが大好きです。 小さなバグ、大きなバグ、怠laz-可能性は無限です。



通常、私たちはすぐにそれを見つけます:実行中のテストがある、ログのどこかで発生した例外が見える、または顧客から苦情を聞く-彼らはこれが機能しなくなったと言います。



ほとんどの場合、このバグがどれほど危険であるかは関係ありません。一時的に回避でき、アプリケーションは通常どおり正常に機能し続けます。 理由が見つかったらすぐにバグを修正し、誰もが喜んでいます。



しかし、ある位置で間違いのようなことをしたと想像してみましょう。 結構です そして、このエラーがあっても、関数の結果は変わらないことがわかります。 まるで間違いがなかったかのように。



正しい出力データにもかかわらず、このエラーにより、実際にはまったく役に立たず、プログラム全体もまったく役に立たなくなったと想像してください。



暗号化の世界へようこそ。



暗号化は「少しバグが多い」ことはできません。 「一般的に機能する」ことはできません。 100%正しく機能するか、この作業をまったく取り入れるべきではありません。 弱いリンクはチェーン全体を破壊します。



さらに悪いことに、プログラムが出力で生成するデータを見ると、キャッチに気付かないでしょう。 何かを暗号化していますが、出力はランダムなゴミです。 このようなものを復号化すると、ソーステキストが表示されます。 うまくいくようです。 え?



先週、cryptocatサービスアルゴリズムの乱数ジェネレーターの欠陥に関する記事がありました。これは素晴らしい例です。



このバグは、乱数ジェネレーターの1つの位置による同じエラーが原因で発生しました。 出力では、関数にはまだ乱数があり、詳しく調べるとランダムに見えました。 効果は、記述されたコードを正しいと見なしていたという事実によって強化されました。



しかし、これはそうではありません。 バグが存在し、乱数は十分にランダムではありませんでした。



最も弱いリンクが切断され、保護を提供するすべての努力が無駄になりました。このアプリケーションの唯一の目的は保護であったため、この場合はさらに悪化します。



ここでの保護は、主な機能にバンドルされている単なる追加機能ではありません。 この場合、それが主な機能でした。



この1つの位置による小さなミスは、アプリケーション全体を即座に破壊しましたが、返された結果を見ると完全に見えませんでした。 このケースのテストを作成するには、特別なスキルと能力が必要であり、テストでミスをする可能性は、テストを必要とするコード自体のエラーの可能性と同じくらい高いです。



だからこそ、私の友人たち、私は暗号化から遠ざかるのです。 私はそんなにクールではありません。 暗号は、本質の通常の理解、基礎となる数学の理解、およびテストを書く能力が十分ではない世界です。



卓越性を達成するには、目標を設定する必要があります。 あなたが成功できない場合、あなたは絶望的です。



暗号化は、私が他の人をより信頼できるものです。 彼らは完璧を達成することができた、私は彼らをとても尊敬している、または彼らも成功しなかったので、私は同情する。



===

翻訳の著者は、 habrahabr.ru / post / 181372を同時に読むことを推奨しています



All Articles