OWASPトップ2 "暗号的な失敗"を開発者に説明する
2021年のOWASPトップ10シリーズをフォローすると、「Cryptographic Failures」、つまり日本語で「暗号的な失敗」というリスクのカテゴリーが2番目に一般的です。
セキュリティの面を気にせずにソフトウェアを作っていると、鍵や窓に錠前をつけないで家を建てるようなものです。ですので、ソフトウェアエンジニアは、アプリケーションの保護が必要な様々な方法について基本知識を持っている必要があり、暗号化もその一つです。
OWASPについてもっと知りたいですか?この記事をチェックしてください。
でも、暗号化って何?
暗号化とは、秘密の文章を書く芸術/科学です。暗号化と言ったら、情報をコード化するプロセスのことで、それにより情報を権限のない第三者には読めないようにします。これには様々な技術が使われていますが、それには暗号、鍵、アルゴリズムがあります。
簡単に言うと、暗号は情報をコード化する具体的な技術です。鍵は、暗号化された情報を復号するために使う秘密の要素です。そして、暗号アルゴリズムは、暗号化を効率的に機能させる数学的な方法です。
これらが合わさって暗号化を形成していますが、この話はもっと複雑になることもあります!さらに、いくつかの種類の暗号化があります。
**対称鍵暗号化:**これは、単一の鍵(秘密鍵)のみを使って平文と暗号文を暗号化および復号する暗号化のタイプです。対称鍵暗号化の種類には、いくつかあります:
- Data Encryption Standard (DES)
- Electronic Code Book (ECB)
- Cipher block Chain(CBC)
- Advanced Encryption Standard (AES)
対称鍵暗号の主な利点は、単一の鍵を使用することでの高速なパフォーマンスです。最大の欠点は、暗号化と復号に同じ鍵を使うことで、セキュリティの問題が生じる点です。
**非対称鍵暗号化:**これは、二つの別々でしかし数学的に関連する鍵を使用してデータを暗号化および復号する暗号化のタイプです。公開鍵はデータを暗号化し、それに対応する秘密鍵がデータを復号します。
非対称鍵暗号化の一些の例は以下の通りです:
- RSAアルゴリズム
- Diffie Hellmanアルゴリズム
- 楕円曲線Diffie Hellmanアルゴリズム
- デジタル署名アルゴリズム
非対称鍵暗号の主な利点は、鍵の配布という問題を排除することです。欠点は、二組の鍵を生成し使用するため、処理が遅くなることです。
自分の暗号化を作る必要があるのか?
安全で信頼性のある暗号化を作るのは非常に難しいし、その分野での多大な知識と経験が必要です。ですので、いいえ、開発者はそれについて心配する必要はありません!
認識された暗号アルゴリズムは、安全とされる前に厳格なセキュリティテストを受けます。
さらに、これらの暗号はしばしばライブラリに含まれており、アプリケーションに組み込むのは簡単です。
開発の日常を考えると、「パスワードの暗号化」という一般的な使い方があります。
例えば、ユーザーがウェブアプリケーションのアカウントを作る時、パスワードは安全に保存されて、漏洩が防がれることが重要です。
パスワードを平文で保存する代わりに、Pythonの「bcrypt」などの暗号化ライブラリを使用して、パスワードをコード化できます。
しかし、その暗号化ライブラリの機構が失敗したらどうなるのでしょうか?次のポイントで見ていきます。
暗号的な失敗
2021年のOWASPトップ10はこのウェブアプリケーションのセキュリティリスクカテゴリーに注意を促しています。
この中で、OWASPは暗号化の実装の共通のエラーをリストしており、システムデータのセキュリティが危険にさらされることがあります。それらのエラーには以下が含まれます:
- 古いまたは弱いアルゴリズムの使用
- 危険な鍵
- 鍵の不適切な管理
- サーバー証明書の検証が足りない
- 鍵としてパスワードの不適切な使用、時代遅れの機能など多くの問題があります。
影響
暗号化の失敗が起きると、攻撃者が金融情報やパスワード、個人データなど機密データにアクセス可能になることがあり、それにより財政的な損失、情報漏洩のリスク、その他の取り返しのつかない損害が発生する可能性があります。
財政的な損失だけではなく、このような失敗はまた、ユーザーの信頼とブランドイメージにも影響を与えることがあります。
この理由から、アプリケーションは適切な暗号化セキュリティを持って開発されることが大切です。
OWASPからの重要な推奨事項
OWASPトップ10には、暗号的な失敗を避けるための重要な実践が含まれています:
- アプリケーションによって処理される、保存される、あるいは送信されるデータを分類し、プライバシー法、規則またはビジネスニーズに基づいてどれが機密かを特定する
- 必要のない機密データを保存しない
- 休止中のすべての機密データを暗号化する
- 最新で強力なアルゴリズム、プロトコル、鍵を使用し、適切な鍵管理を確立する
- TLSのような安全なプロトコルで伝送中のすべてのデータを暗号化し、フォワードセレット暗号およびサーバーによる暗号の優先順位を設定する。例えばHTTP Strict Transport Security (HSTS)のような原則を使用して暗号化を強制する
- 機密データを含む応答のキャッシュを無効にする
- データの分類に従って必要なセキュリティコントロールを適用する
- FTPやSMTPのような古いプロトコルを使用して機密を伝送しない
- 作業ファクタを持つ適応ハッシュ関数と塩を使用してパスワードを保存する、例えばArgon2、scrypt、bcrypt、またはPBKDF2
- 運用モードに合わせて適切な初期化ベクトルを選ぶ。多くのモードでは、安全な擬似乱数ジェネレータ(CSPRNG)を使用することを意味します。非繰り返しの初期化ベクトル(IV)が必要なモードでは、IVをCSPRNGで生成する必要はありません。いずれにしても、同じ鍵でIVを二度使用しないこと
- ただの暗号化ではなく、常に認証された暗号化を使用する
- ランダムに鍵を生成し、バイト配列としてメモリに保管する。パスワードが使用される場合、それはパスワードベースの適切な鍵導出機能を使って鍵に変換される必要があります
そして他の多くの重要な対策があります!
暗号化は難しいものではありません!
開発者はアプリケーションのセキュリティのための最初の防衛ラインであり、そのためには、たとえばアルゴリズムなどに関わる統計的または非常に複雑な詳細に煩わされることなく、暗号化の本質がどのように機能するかを知っている必要があります。
また、私たちの開発日常には、使っている暗号アルゴリズムとプロトコルが最新で強力で、鍵の管理が適切で、サーバー証明書の検証が正しいかをチェックすることが必要です。
要するに、知識が不足すると、攻撃者によって悪用され、機密データや情報にリスクが生じる可能性のある脆弱性につながる可能性があります。
OWASP TOP 10についてのさらなるコンテンツについては、この記事をアクセスしてください。
OWASPからのさらなるヒント!
こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/gabogaldino/explicando-o-top-2-da-owasp-falhas-criptograficas-para-desenvolvedores-4846