Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

[インデックス 10475] ファイルの概要

このコミットは、Go言語の標準ライブラリ src/pkg/crypto/bcrypt/bcrypt.go 内のパッケージコメントにおける単純なタイポ(スペルミス)を修正するものです。機能的な変更は一切含まれておらず、ドキュメンテーションの正確性を向上させるための修正です。

コミット

  • コミットハッシュ: 85255f99426b97c6663db6c4a5387d7f958f0282
  • Author: Benny Siegert bsiegert@gmail.com
  • Date: Mon Nov 21 09:11:34 2011 -0800
  • コミットメッセージ:
    bcrypt: Correct typo in package comment.
    
    R=golang-dev, gri
    CC=golang-dev
    https://golang.org/cl/5415062
    

GitHub上でのコミットページへのリンク

https://github.com/golang/go/commit/85255f99426b97c6663db6c4a5387d7f958f0282

元コミット内容

    bcrypt: Correct typo in package comment.

    R=golang-dev, gri
    CC=golang-dev
    https://golang.org/cl/5415062

変更の背景

この変更は、crypto/bcrypt パッケージのコメントに含まれていた「adapative」というスペルミスを「adaptive」に修正することを目的としています。コードの機能には影響を与えませんが、ドキュメンテーションの正確性と品質を保つことは、ライブラリの利用者にとって非常に重要です。特に、セキュリティ関連のライブラリにおいては、その説明が正確であることが信頼性につながります。

前提知識の解説

bcryptとは

bcryptは、パスワードハッシュ化のために設計された適応型(adaptive)のハッシュ関数です。Niels ProvosとDavid Mazièresによって1999年に開発され、USENIXで発表されました。従来のMD5やSHA-1のような高速なハッシュ関数がパスワードハッシュには不適切であるという問題意識から生まれました。

なぜパスワードハッシュにbcryptのような適応型ハッシュが必要なのか?

  1. ブルートフォース攻撃への耐性: 高速なハッシュ関数は、攻撃者が大量のパスワード候補を短時間で試すことを可能にします。bcryptは意図的に計算コストを高くすることで、この攻撃を遅延させます。
  2. レインボーテーブル攻撃への耐性: ソルト(salt)と呼ばれるランダムなデータをパスワードに付加してハッシュ化することで、事前に計算されたハッシュ値のデータベース(レインボーテーブル)を用いた攻撃を防ぎます。bcryptは各パスワードに対してユニークなソルトを自動的に生成・使用します。
  3. 適応性(Adaptivity): bcryptの最大の特徴は、計算コストを調整できる「ワークファクター(work factor)」または「コストファクター(cost factor)」と呼ばれるパラメータを持つことです。このパラメータを増やすことで、将来的に計算能力が向上しても、ハッシュ計算にかかる時間を一定に保ち、攻撃の効率を低下させることができます。これにより、ハードウェアの進化に対応してセキュリティレベルを維持することが可能です。

適応型ハッシュ(Adaptive Hashing)

適応型ハッシュとは、計算の難易度を調整できるハッシュアルゴリズムを指します。これは、CPUの処理能力が年々向上していく中で、パスワードハッシュのセキュリティを維持するために不可欠な特性です。攻撃者がより強力なハードウェア(例:GPU、ASIC)を手に入れたとしても、ワークファクターを上げることで、ハッシュ計算に必要な時間を引き延ばし、攻撃コストを増大させることができます。

技術的詳細

bcryptは、Blowfish暗号をベースに構築されています。具体的には、Blowfishの鍵スケジュールアルゴリズムを拡張し、パスワードとソルトを組み合わせて鍵を生成し、それを繰り返し適用することでハッシュ値を計算します。

bcryptのハッシュ計算プロセスは以下の要素を含みます。

  1. ソルトの生成: 各パスワードに対して、ランダムでユニークなソルトが生成されます。これはハッシュ値と共に保存されます。
  2. ワークファクターの指定: 計算の反復回数を決定するコストパラメータです。この値が大きいほど、計算に時間がかかり、ブルートフォース攻撃に対する耐性が高まります。
  3. 拡張鍵スケジュール: Blowfishの鍵スケジュールアルゴリズムを、パスワードとソルトから生成されたデータで初期化します。
  4. 繰り返しハッシュ化: 初期化された鍵スケジュールを用いて、プレーンテキストのパスワードを繰り返し暗号化します。この繰り返し回数はワークファクターによって決定されます。

この繰り返し処理により、bcryptは意図的に計算コストを高くし、高速なハッシュ関数では実現できないセキュリティレベルを提供します。

コアとなるコードの変更箇所

このコミットによる変更は、src/pkg/crypto/bcrypt/bcrypt.go ファイルの1行のみです。

--- a/src/pkg/crypto/bcrypt/bcrypt.go
+++ b/src/pkg/crypto/bcrypt/bcrypt.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-// Package bcrypt implements Provos and Mazières's bcrypt adapative hashing
+// Package bcrypt implements Provos and Mazières's bcrypt adaptive hashing
 // algorithm. See http://www.usenix.org/event/usenix99/provos/provos.pdf
 package bcrypt
 

コアとなるコードの解説

変更された行は、Go言語のパッケージコメントです。

  • 変更前: // Package bcrypt implements Provos and Mazières's bcrypt adapative hashing
  • 変更後: // Package bcrypt implements Provos and Mazières's bcrypt adaptive hashing

「adapative」という単語が「adaptive」に修正されています。これは単なるスペルミスであり、bcrypt パッケージの実際のハッシュ計算ロジックやセキュリティ機能には何ら影響を与えません。この修正は、コードの可読性とドキュメンテーションの正確性を向上させるためのものです。

関連リンク

参考にした情報源リンク