[インデックス 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のような適応型ハッシュが必要なのか?
- ブルートフォース攻撃への耐性: 高速なハッシュ関数は、攻撃者が大量のパスワード候補を短時間で試すことを可能にします。bcryptは意図的に計算コストを高くすることで、この攻撃を遅延させます。
- レインボーテーブル攻撃への耐性: ソルト(salt)と呼ばれるランダムなデータをパスワードに付加してハッシュ化することで、事前に計算されたハッシュ値のデータベース(レインボーテーブル)を用いた攻撃を防ぎます。bcryptは各パスワードに対してユニークなソルトを自動的に生成・使用します。
- 適応性(Adaptivity): bcryptの最大の特徴は、計算コストを調整できる「ワークファクター(work factor)」または「コストファクター(cost factor)」と呼ばれるパラメータを持つことです。このパラメータを増やすことで、将来的に計算能力が向上しても、ハッシュ計算にかかる時間を一定に保ち、攻撃の効率を低下させることができます。これにより、ハードウェアの進化に対応してセキュリティレベルを維持することが可能です。
適応型ハッシュ(Adaptive Hashing)
適応型ハッシュとは、計算の難易度を調整できるハッシュアルゴリズムを指します。これは、CPUの処理能力が年々向上していく中で、パスワードハッシュのセキュリティを維持するために不可欠な特性です。攻撃者がより強力なハードウェア(例:GPU、ASIC)を手に入れたとしても、ワークファクターを上げることで、ハッシュ計算に必要な時間を引き延ばし、攻撃コストを増大させることができます。
技術的詳細
bcryptは、Blowfish暗号をベースに構築されています。具体的には、Blowfishの鍵スケジュールアルゴリズムを拡張し、パスワードとソルトを組み合わせて鍵を生成し、それを繰り返し適用することでハッシュ値を計算します。
bcryptのハッシュ計算プロセスは以下の要素を含みます。
- ソルトの生成: 各パスワードに対して、ランダムでユニークなソルトが生成されます。これはハッシュ値と共に保存されます。
- ワークファクターの指定: 計算の反復回数を決定するコストパラメータです。この値が大きいほど、計算に時間がかかり、ブルートフォース攻撃に対する耐性が高まります。
- 拡張鍵スケジュール: Blowfishの鍵スケジュールアルゴリズムを、パスワードとソルトから生成されたデータで初期化します。
- 繰り返しハッシュ化: 初期化された鍵スケジュールを用いて、プレーンテキストのパスワードを繰り返し暗号化します。この繰り返し回数はワークファクターによって決定されます。
この繰り返し処理により、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
パッケージの実際のハッシュ計算ロジックやセキュリティ機能には何ら影響を与えません。この修正は、コードの可読性とドキュメンテーションの正確性を向上させるためのものです。
関連リンク
- Go CL (Code Review) リンク: https://golang.org/cl/5415062
- bcryptの原論文: "A Future-Adaptable Password Scheme" by Niels Provos and David Mazières, USENIX 1999: http://www.usenix.org/event/usenix99/provos/provos.pdf
参考にした情報源リンク
- bcrypt (Wikipedia): https://en.wikipedia.org/wiki/Bcrypt
- Go言語の
crypto/bcrypt
パッケージドキュメント (GoDoc): https://pkg.go.dev/golang.org/x/crypto/bcrypt (このコミット時点ではpkg.go.dev
は存在しないが、現在のドキュメントとして参考になる)