Webアプリ開発者のためのセキュリティ入門:OWASP Top 10 2025:Cryptographic Failures(暗号化の失敗)

Laravel

OWASP Top 10 を通じて、Webアプリケーションのセキュリティを学んでいきましょう。

OWASPとOWASP Top10についてはこちら。

https://biz.addisteria.com/what_is_owasp_top10/

今回は最新のOWASP TOP10 2025*で4位の座に輝いたCryptographic Failures(暗号化の失敗)について解説します。

こちら、前回の2021年版から2ランクダウンして4位となりましたが、依然として重要な脆弱性です。

※2025年版は現在 Release Candidate(候補版)として公開されており、正式版では内容が調整される可能性があります。

Laravelアプリケーション開発時の対策や、バイブコーディング(生成AIコーディング)でも役立つ対策も考えていきますね。

Cryptographic Failures(暗号化の失敗)

Cryptographic Failures(暗号化の失敗)について、公式説明ページはこちら:

パスワードや個人データなど流出してはいけないデータは、暗号化して保存します。

ですが、この暗号化の方法が古かったり、簡単に推測できたりすると、大事なデータが流出してしまいます。

Cryptographic Failures(暗号化の失敗)は、こういったリスクに関する脆弱性をさします。次のような脆弱性が考えられます。

  • 暗号化キーは使いまわされている。弱すぎる。
  • 暗号化が強制されてない。
  • 古いハッシュ関数(MD5 や SHA1)が使われている。

個人データ・機密データ流出による損害と信頼失墜を考えると、おそろしい限りですね。

CWE(共通脆弱性タイプ)

このカテゴリーに含まれる主なCWE(脆弱性分類)は次のとおりです。

  • CWE-327:壊れたまたはリスクの高い暗号アルゴリズムの使用

  • CWE-331:エントロピー不足(ランダム性が不十分)

  • CWE-1241:乱数生成器での予測可能なアルゴリズムの使用

  • CWE-338:暗号学的に弱い疑似乱数生成器(PRNG)の使用

対策

このリスクに対して、下記のような対策が挙げられます。

  • データを分類する
     扱うデータを分類し、法律や社内ルールに沿って機密データを特定する。

  • 最も機密性の高い鍵は専用環境に保存

  • 信頼できる暗号アルゴリズムの実装を使う
     可能な限り、広く信頼されている暗号アルゴリズムの実装を使用する。

  • 不要な機密データは保存しない

  • 保存するときは暗号化する

  • 強力で最新の暗号を使う
  • 通信中のデータも暗号化する
  • 機密データをキャッシュしない
     ブラウザや中継サーバーに一時保存されないよう、キャッシュを無効にする。

  • データの種類に応じて対策を変える
     分類したデータごとに、必要なセキュリティ対策を適用する。

  • 古い通信プロトコルを使わない
     FTPやSMTPなど、暗号化されていない古い通信方法で機密データを送らない。

  • パスワードは安全なハッシュで保存する
     bcrypt、scrypt、Argon2などの強力な方式を使い、ソルトを付けて保存する。

  • 初期化ベクトル(IV)を正しく扱う
     暗号モードに応じて、CSPRNG(安全な乱数生成器)で作る。
     同じ鍵で同じIVを二度使わない。

  • 「認証付き暗号化」を使う
     単なる暗号化ではなく、認証付き暗号を利用する。

  • 鍵は安全に作り、安全に使う
     鍵は暗号的に安全な方法でランダム生成し、バイト配列として保持する。
     パスワードを使う場合は、鍵導出関数(PBKDF2など)で鍵に変換する。

  • 安全な乱数を使う
     暗号処理では必ず安全な乱数(CSPRNG)を使い、予測されないようにする。
     最近のAPIは自動で安全な設定になっていることが多い。

  • 古い暗号やハッシュを使わない
     MD5、SHA1、PKCS#1 v1.5 などの古い方式は避ける。

  • 設定を確認・検証する
     暗号や通信設定が本当に安全に動作しているか、第三者による確認やテストを行う。

  • ポスト量子暗号への準備を検討

Laravelでの対策

「そういわれても、具体的に何をしたら」という方のために、Laravelでの関連する対策・技術をまとめます。

暗号化

Laravelの暗号化サービスは、OpenSSL経由でAES-256およびAES-128暗号化を使用しています。

暗号化の際に使われる「キー」は、.envのAPP_KEYに設定します。通常はインストール時に自動で生成されます。デフォルトでは、より安全なAES256用のキーの長さとなっています。

AES-256は、非常に強力な暗号化アルゴリズムです。

暗号化を行う際には、Cryptファサードを使います。encrypt()ヘルパ関数を使うこともできます。

【暗号化の例】

Laravelの暗号化について詳細はこちら。

ハッシュ化

Laravelは、【対策】にも挙げられていた安全なBcryptとArgon2ハッシュをサポートしています。

Laravelアプリケーションスターターキットを使用している場合は、登録と認証時のパスワード保存時には、デフォルトでBcryptが使用されます。

【ハッシュ化の例】

通信の暗号化(HTTPS化)

通信の暗号化(HTTPS化)は、基本的に サーバー側で行います。

本番環境にデプロイする際には、.htaccess ファイル(Apache)や nginx.conf(Nginx)などで、HTTP から HTTPS へのリダイレクト設定を行いましょう。

*ロードバランサーの背後でアプリケーションを実行している場合は、TrustProxies ミドルウェアを設定する必要があります。

バイブコーディングでも役立つ全般的な注意点

バイブコーディング(生成AIコーディング)では、AIが基本的なセキュリティコードは書いてくれます。ただし、生成されたコードのチェックは必要です。

また技術的な実装以前に、設計段階での判断がとても重要です。具体的には、下記について考えておく必要があります。

  • どういったデータを扱っているのか分類する
  • 必要なければ、機密データ/個人データはデータベースに保存しない

その上で、機密データを保存せねばならない時は、適切に暗号化を行っていきます。

さいごに

パスワードや機密データが漏れると一発アウトといいますか、かなり怖い事態。

不必要に個人データ・機密データを保存しない。シンプルながら、これが最も大事ですよね。

たとえば、Stripe を利用する場合は、支払い処理を Stripe側で完結させる設計 にすれば、Webアプリのデータベースに クレジットカード番号を保存しない で済みます。

ここはしっかりと「人」が決めていく部分です。技術面だけでなく、やはりこういった設計は重要ですね。

OWASP Top10で学ぶセキュリティ、次の項目はこちら。

Laravel Laravelセキュリティ OWASP Top 10を分かりやすく解説 セキュリティ

ご相談受付

お問い合わせ

生成AIを使った開発の研修・各種ご相談承っています。お気軽にお問い合わせください。

詳細を見てみる

ご相談受付

お問い合わせ

生成AIを使った開発の研修・各種ご相談承っています。お気軽にお問い合わせください。

詳細を見てみる

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新版テキストに加え、Laravel8版~Laravel11版もご用意しています♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新版テキストに加え、Laravel8版からLaravel11版もご用意しています♪

Laravelの本を書きました。


ひつじが目印♪

Laravelの使い方を分かりやすく解説した書籍を出版しました。 ご好評につき、最新版に対応した改訂版を2025年7月に発売
書店やAmazon等のオンラインショップにて販売中です。 詳しくは下記ボタンをクリック

書籍の詳細を見てみる

Laravelの本書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravelの使い方を分かりやすく解説した書籍を出版しました。ご好評につき最新版対応の改訂版発売。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる
Twitter始めました。
40代からプログラミング!
タイトルとURLをコピーしました