質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.96%

bcryptをやめてshaでハッシュ化すべきですか?

解決済

回答 2

投稿

  • 評価 0
  • クリップ 6
  • VIEW 925

yuki84web

score 724

OWASP セキュリティ要件定義書3.0 (https://github.com/ueno1000/secreq) によれば

ハッシュ関数、暗号アルゴリズムは『電子政府における調達のために参照すべき暗号のリスト(CRYPTREC暗号リスト)』に記載のものを使用すること

広く使われているハッシュ関数、疑似乱数生成系、暗号アルゴリズムの中には安全でないものもあります。安全なものを使用するためには、『電子政府における調達のために参照すべき暗号のリスト(CRYPTREC暗号リスト)』に記載されたものを使用する必要があります。

と、あります。

電子政府における調達のために参照すべき暗号のリスト(CRYPTREC暗号リスト)※CRYPTRECホームページ
https://www.cryptrec.go.jp/list/cryptrec-ls-0001-2012r4.pdf

リストでは、ハッシュ関数としてSHA256, SHA384, SHA512が挙げられています。

現在開発で使用しているフレームワークでは、標準でbcryptを使われるようになっていますが、
カスタマイズによってshaに変更すべきでしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    上記に当てはまらず、質問内容が明確になっていない質問には「」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+11

結論から言えば、bcryptを使うべきであって、SHAに変更するべきではありません。
OWASP セキュリティ要件定義書3.0 のルーツとして、トライコーダー版(作成者はOWASP版と同じ上野宣氏)の『発注者のためのWeb システム/Web アプリケーションセキュリティ要件書』があります。こちらには複数のネタ元がありまして、その一つは以下の資料だと思われます。トライコーダー版のセキュリティ要件書には参考文献として記載されていました。

高木浩光『安全なWeb アプリ開発の鉄則2006』

この資料の中に、

使用する暗号と乱数の指定
• 目的
– 安全性の評価されていない独自暗号アルゴリズムの使用を禁止する
• CRYPTREC電子政府推奨暗号の使用を指定
http://www.cryptrec.jp

とあります。
これが、トライコーダー版だと、

9.3 ハッシュ関数、疑似乱数生成系、暗号アルゴリズムはCRYPTRECの電子政府推奨暗号リストに記載のもののみを使用すること
広く使われているハッシュ関数、疑似乱数生成系、暗号アルゴリズムの中には安全でないものもあります。安全なものを使用するためには、CRYPTREC の電子政府推奨暗号リストに記載されたものを使用する必要があります。

となっています。これが少し修正されて、OWASP版の記載として残っているわけです。この項は、高木氏の資料を含めて、元々パスワードの保存については意図していないと思われます。

以上のような成り立ちの経緯もあって、『OWASP セキュリティ要件定義書3.0』はOWASPの冠はついているものの、現在の目から見て記載内容に統一性がなく、この内容にとらわれるのはどうかと思います。asmさんが紹介されているように、OWASPにはパスワード保存のチートシートもあることですし、広く文献を検討されたほうがよいと思います。

投稿

ockeghem

EGセキュアソリューションズ株式会社代表

score 6494

    • 回答の評価を上げる

      以下のような回答は評価を上げましょう

      評価が高い回答ほどページの上位に表示されます。

    • 回答の評価を下げる

      下記のような回答は推奨されていません。

      評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

    • yuki84web

      yuki84web

      2019/12/17 12:00

      ありがとうございます。2.0の頃から、この要件定義書をでチェックしつつ開発してきましたが、これからはご提示いただいたチートシート含め他の文献も参考にするようにします。

    +4

    「セキュリティ要件定義書」を満たすかについては策定した人の意見を聞いてみたいところですが

    セキュリティ的に適切であるかについてはOWASPのパスワード保管に関するチートシートを見ると

    Use Bcrypt unless you have a good reason not to.

    Bcrypt is the most widely supported of the algorithms, and should be the default choice unless there are specific requirements for PBKDF2, or appropriate knowledge to tune Argon2.

    と、ある通り「特別な必要」や「知識」がないのならばbcryptを使うのは現状適切なようです。

    ただ、72文字制限やwork factorの問題があるので詳しくはリンク先を一読することをおすすめします。

    投稿

    asm

    score 10007

    • 回答の評価を上げる

      以下のような回答は評価を上げましょう

      評価が高い回答ほどページの上位に表示されます。

    • 回答の評価を下げる

      下記のような回答は推奨されていません。

      評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

    • yuki84web

      yuki84web

      2019/12/17 11:55

      ありがとうございます。チートシートを確認してみます。72文字制限については把握していましたが、とりあえずbcryptのままにしておくことにします。

    15分調べてもわからないことは、teratailで質問しよう!

    • ただいまの回答率 89.96%
    • 質問をまとめることで、思考を整理して素早く解決
    • テンプレート機能で、簡単に質問をまとめられる