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

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

このコミットは、Go言語の crypto/tls パッケージにおける2つの重要な変更を導入しています。一つは、パッケージコメント内のTLSバージョン表記をTLS 1.0からTLS 1.1に更新すること。もう一つは、証明書生成ツール generate_cert.go におけるRSA鍵のデフォルトサイズを1024ビットから2048ビットに引き上げることです。後者の変更は、NIST(米国国立標準技術研究所)の推奨事項に基づいています。

コミット

commit b92b09300a2b85d02041499f5cf93a7b30939c36
Author: Frithjof Schulze <schulze@math.uni-hannover.de>
Date:   Thu Jun 27 11:23:55 2013 -0700

    crypto/tls: Change TLS version to 1.1 in the package comment.
    
    Also use 2048-bit RSA keys as default in generate_cert.go,
    as recommended by the NIST.
    
    R=golang-dev, rsc, bradfitz
    CC=golang-dev
    https://golang.org/cl/10676043

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

https://github.com/golang/go/commit/b92b09300a2b85d02041499f5cf93a7b30939c36

元コミット内容

crypto/tls: Change TLS version to 1.1 in the package comment. Also use 2048-bit RSA keys as default in generate_cert.go, as recommended by the NIST.

変更の背景

このコミットは、主にセキュリティと標準への準拠という2つの背景に基づいています。

  1. TLSバージョンの更新: crypto/tls パッケージは、当初TLS 1.0 (RFC 2246) を部分的に実装しているとコメントされていました。しかし、時間の経過とともにTLS 1.1 (RFC 4346) がより広く採用され、セキュリティ上の改善が加えられました。この変更は、パッケージがTLS 1.1の機能もサポートしていることを正確に反映するためのものです。これは、GoのTLS実装が進化し、より新しいプロトコルバージョンに対応していることを示すものです。

  2. RSA鍵長の強化: 2013年当時、NIST(米国国立標準技術研究所)は、暗号学的強度を確保するために、RSA鍵の最小推奨サイズを1024ビットから2048ビットに引き上げることを推奨していました。1024ビットRSA鍵は、計算能力の向上に伴い、将来的にブルートフォース攻撃に対して脆弱になる可能性が指摘されていました。この変更は、Goの証明書生成ツールがデフォルトでより強力な鍵を生成するようにすることで、生成される証明書のセキュリティレベルを向上させることを目的としています。これにより、Goアプリケーションがデフォルトでより堅牢なTLS通信を確立できるようになります。

前提知識の解説

  • TLS (Transport Layer Security): インターネット上でデータを安全にやり取りするための暗号化プロトコルです。以前はSSL (Secure Sockets Layer) と呼ばれていました。TLSは、通信の盗聴、改ざん、なりすましを防ぐための仕組みを提供します。
    • TLS 1.0 (RFC 2246): 1999年に定義されたTLSプロトコルのバージョンです。
    • TLS 1.1 (RFC 4346): 2006年に定義されたTLSプロトコルのバージョンで、TLS 1.0に対するいくつかのセキュリティ改善(例: CBCモードの脆弱性対策)が含まれています。
  • RSA (Rivest–Shamir–Adleman): 公開鍵暗号方式の一つで、デジタル署名や鍵交換、データ暗号化に広く用いられます。RSAのセキュリティは、大きな数の素因数分解の困難性に基づいています。
  • RSA鍵長 (RSA Key Length): RSA鍵のビット数で表され、鍵長が長いほど暗号強度が向上します。一般的に、鍵長が長いほど素因数分解が困難になり、解読が難しくなります。しかし、鍵長が長くなると、暗号化・復号化の処理にかかる計算コストも増加します。
  • NIST (National Institute of Standards and Technology): 米国商務省に属する政府機関で、標準化活動を行っています。特に暗号技術の分野では、セキュリティに関するガイドラインや推奨事項を公開しており、世界中のセキュリティ標準に大きな影響を与えています。NIST SP 800-57 Part 1 Revision 3などの文書で、暗号鍵の管理に関する推奨事項が示されています。

技術的詳細

このコミットは、Go言語の標準ライブラリである crypto/tls パッケージ内の2つのファイルに影響を与えています。

  1. src/pkg/crypto/tls/tls.go:

    • このファイルは crypto/tls パッケージの主要な定義を含んでいます。
    • 変更は、ファイルの冒頭にあるパッケージコメントにあります。
    • // Package tls partially implements TLS 1.0, as specified in RFC 2246. から
    • // Package tls partially implements TLS 1.1, as specified in RFC 4346. へと変更されています。
    • これは、コードの実装がTLS 1.1の仕様の一部をサポートするようになったことを、ドキュメントとして明示するものです。実際のプロトコルハンドシェイクや暗号スイートの選択ロジックがTLS 1.1に対応するように以前から更新されていたか、あるいはこのコメント変更と同時に内部的な対応も行われた可能性があります。コメントの変更自体は、ユーザーや開発者に対してパッケージの能力を正確に伝えるためのものです。
  2. src/pkg/crypto/tls/generate_cert.go:

    • このファイルは、テストや開発目的で自己署名証明書を生成するためのユーティリティツールです。
    • 変更は、コマンドライン引数を定義する flag.Int の初期値にあります。
    • rsaBits = flag.Int("rsa-bits", 1024, "Size of RSA key to generate") から
    • rsaBits = flag.Int("rsa-bits", 2048, "Size of RSA key to generate") へと変更されています。
    • これにより、generate_cert.go ツールを rsa-bits フラグを指定せずに実行した場合、デフォルトで2048ビットのRSA鍵が生成されるようになります。これは、生成される証明書のセキュリティ強度を向上させるための直接的な変更です。ユーザーは引き続き rsa-bits フラグを使用して異なる鍵長を指定できますが、デフォルトがより安全な値になったことで、誤って脆弱な鍵長の証明書を生成するリスクが低減されます。

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

diff --git a/src/pkg/crypto/tls/generate_cert.go b/src/pkg/crypto/tls/generate_cert.go
index 215644d243..b417ea4640 100644
--- a/src/pkg/crypto/tls/generate_cert.go
+++ b/src/pkg/crypto/tls/generate_cert.go
@@ -30,7 +30,7 @@ var (
  	validFrom = flag.String("start-date", "", "Creation date formatted as Jan 1 15:04:05 2011")
  	validFor  = flag.Duration("duration", 365*24*time.Hour, "Duration that certificate is valid for")
  	isCA      = flag.Bool("ca", false, "whether this cert should be its own Certificate Authority")
-	rsaBits   = flag.Int("rsa-bits", 1024, "Size of RSA key to generate")
+	rsaBits   = flag.Int("rsa-bits", 2048, "Size of RSA key to generate")
  )
  
  func main() {
diff --git a/src/pkg/crypto/tls/tls.go b/src/pkg/crypto/tls/tls.go
index 9230656d6a..054e477618 100644
--- a/src/pkg/crypto/tls/tls.go
+++ b/src/pkg/crypto/tls/tls.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 tls partially implements TLS 1.0, as specified in RFC 2246.
+// Package tls partially implements TLS 1.1, as specified in RFC 4346.
 package tls
 
  import (

コアとなるコードの解説

  1. src/pkg/crypto/tls/generate_cert.go の変更:

    • flag.Int("rsa-bits", 1024, ...) の部分が flag.Int("rsa-bits", 2048, ...) に変更されています。
    • flag.Int はGoの flag パッケージの関数で、コマンドラインフラグを整数型として定義します。
    • 第一引数はフラグ名 ("rsa-bits")、第二引数はデフォルト値 (1024 から 2048 へ変更)、第三引数はフラグの説明です。
    • この変更により、generate_cert.go を実行する際に -rsa-bits フラグを明示的に指定しない場合、生成されるRSA鍵のビット長が自動的に2048ビットになります。これは、より強力な暗号鍵をデフォルトで利用することを促し、セキュリティのベストプラクティスに準拠するためのものです。
  2. src/pkg/crypto/tls/tls.go の変更:

    • ファイルの先頭にあるパッケージコメントが変更されています。
    • // Package tls partially implements TLS 1.0, as specified in RFC 2246. から
    • // Package tls partially implements TLS 1.1, as specified in RFC 4346. への変更です。
    • これはコードの動作に直接的な影響を与えるものではなく、パッケージのドキュメントを更新するものです。このコメントは、crypto/tls パッケージがTLS 1.1の仕様の一部を実装していることを示しており、開発者に対してパッケージの機能範囲を正確に伝えます。これは、GoのTLS実装が進化し、より新しいプロトコルバージョンに対応していることを示す重要な情報です。

関連リンク

参考にした情報源リンク

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

このコミットは、Go言語の crypto/tls パッケージにおける2つの重要な変更を導入しています。一つは、パッケージコメント内のTLSバージョン表記をTLS 1.0からTLS 1.1に更新すること。もう一つは、証明書生成ツール generate_cert.go におけるRSA鍵のデフォルトサイズを1024ビットから2048ビットに引き上げることです。後者の変更は、NIST(米国国立標準技術研究所)の推奨事項に基づいています。

コミット

commit b92b09300a2b85d02041499f5cf93a7b30939c36
Author: Frithjof Schulze <schulze@math.uni-hannover.de>
Date:   Thu Jun 27 11:23:55 2013 -0700

    crypto/tls: Change TLS version to 1.1 in the package comment.
    
    Also use 2048-bit RSA keys as default in generate_cert.go,
    as recommended by the NIST.
    
    R=golang-dev, rsc, bradfitz
    CC=golang-dev
    https://golang.org/cl/10676043

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

https://github.com/golang/go/commit/b92b09300a2b85d02041499f5cf93a7b30939c36

元コミット内容

crypto/tls: Change TLS version to 1.1 in the package comment. Also use 2048-bit RSA keys as default in generate_cert.go, as recommended by the NIST.

変更の背景

このコミットは、主にセキュリティと標準への準拠という2つの背景に基づいています。

  1. TLSバージョンの更新: crypto/tls パッケージは、当初TLS 1.0 (RFC 2246) を部分的に実装しているとコメントされていました。しかし、時間の経過とともにTLS 1.1 (RFC 4346) がより広く採用され、セキュリティ上の改善が加えられました。この変更は、パッケージがTLS 1.1の機能もサポートしていることを正確に反映するためのものです。これは、GoのTLS実装が進化し、より新しいプロトコルバージョンに対応していることを示すものです。

  2. RSA鍵長の強化: 2013年当時、NIST(米国国立標準技術研究所)は、暗号学的強度を確保するために、RSA鍵の最小推奨サイズを1024ビットから2048ビットに引き上げることを推奨していました。1024ビットRSA鍵は、計算能力の向上に伴い、将来的にブルートフォース攻撃に対して脆弱になる可能性が指摘されていました。この変更は、Goの証明書生成ツールがデフォルトでより強力な鍵を生成するようにすることで、生成される証明書のセキュリティレベルを向上させることを目的としています。これにより、Goアプリケーションがデフォルトでより堅牢なTLS通信を確立できるようになります。

前提知識の解説

  • TLS (Transport Layer Security): インターネット上でデータを安全にやり取りするための暗号化プロトコルです。以前はSSL (Secure Sockets Layer) と呼ばれていました。TLSは、通信の盗聴、改ざん、なりすましを防ぐための仕組みを提供します。
    • TLS 1.0 (RFC 2246): 1999年に定義されたTLSプロトコルのバージョンです。
    • TLS 1.1 (RFC 4346): 2006年に定義されたTLSプロトコルのバージョンで、TLS 1.0に対するいくつかのセキュリティ改善(例: CBCモードの脆弱性対策)が含まれています。
  • RSA (Rivest–Shamir–Adleman): 公開鍵暗号方式の一つで、デジタル署名や鍵交換、データ暗号化に広く用いられます。RSAのセキュリティは、大きな数の素因数分解の困難性に基づいています。
  • RSA鍵長 (RSA Key Length): RSA鍵のビット数で表され、鍵長が長いほど暗号強度が向上します。一般的に、鍵長が長いほど素因数分解が困難になり、解読が難しくなります。しかし、鍵長が長くなると、暗号化・復号化の処理にかかる計算コストも増加します。
  • NIST (National Institute of Standards and Technology): 米国商務省に属する政府機関で、標準化活動を行っています。特に暗号技術の分野では、セキュリティに関するガイドラインや推奨事項を公開しており、世界中のセキュリティ標準に大きな影響を与えています。NIST SP 800-131Aなどの文書で、暗号鍵の管理に関する推奨事項が示されています。2013年当時、NISTは1024ビットRSA鍵の非推奨化と2048ビット以上のRSA鍵の使用を推奨していました。

技術的詳細

このコミットは、Go言語の標準ライブラリである crypto/tls パッケージ内の2つのファイルに影響を与えています。

  1. src/pkg/crypto/tls/tls.go:

    • このファイルは crypto/tls パッケージの主要な定義を含んでいます。
    • 変更は、ファイルの冒頭にあるパッケージコメントにあります。
    • // Package tls partially implements TLS 1.0, as specified in RFC 2246. から
    • // Package tls partially implements TLS 1.1, as specified in RFC 4346. へと変更されています。
    • これは、コードの実装がTLS 1.1の仕様の一部をサポートするようになったことを、ドキュメントとして明示するものです。実際のプロトコルハンドシェイクや暗号スイートの選択ロジックがTLS 1.1に対応するように以前から更新されていたか、あるいはこのコメント変更と同時に内部的な対応も行われた可能性があります。コメントの変更自体は、ユーザーや開発者に対してパッケージの能力を正確に伝えるためのものです。
  2. src/pkg/crypto/tls/generate_cert.go:

    • このファイルは、テストや開発目的で自己署名証明書を生成するためのユーティリティツールです。
    • 変更は、コマンドライン引数を定義する flag.Int の初期値にあります。
    • rsaBits = flag.Int("rsa-bits", 1024, "Size of RSA key to generate") から
    • rsaBits = flag.Int("rsa-bits", 2048, "Size of RSA key to generate") へと変更されています。
    • これにより、generate_cert.go ツールを rsa-bits フラグを指定せずに実行した場合、デフォルトで2048ビットのRSA鍵が生成されるようになります。これは、生成される証明書のセキュリティ強度を向上させるための直接的な変更です。ユーザーは引き続き rsa-bits フラグを使用して異なる鍵長を指定できますが、デフォルトがより安全な値になったことで、誤って脆弱な鍵長の証明書を生成するリスクが低減されます。

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

diff --git a/src/pkg/crypto/tls/generate_cert.go b/src/pkg/crypto/tls/generate_cert.go
index 215644d243..b417ea4640 100644
--- a/src/pkg/crypto/tls/generate_cert.go
+++ b/src/pkg/crypto/tls/generate_cert.go
@@ -30,7 +30,7 @@ var (
  	validFrom = flag.String("start-date", "", "Creation date formatted as Jan 1 15:04:05 2011")
  	validFor  = flag.Duration("duration", 365*24*time.Hour, "Duration that certificate is valid for")
  	isCA      = flag.Bool("ca", false, "whether this cert should be its own Certificate Authority")
-	rsaBits   = flag.Int("rsa-bits", 1024, "Size of RSA key to generate")
+	rsaBits   = flag.Int("rsa-bits", 2048, "Size of RSA key to generate")
  )
  
  func main() {
diff --git a/src/pkg/crypto/tls/tls.go b/src/pkg/crypto/tls/tls.go
index 9230656d6a..054e477618 100644
--- a/src/pkg/crypto/tls/tls.go
+++ b/src/pkg/crypto/tls/tls.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.\n
-// Package tls partially implements TLS 1.0, as specified in RFC 2246.
+// Package tls partially implements TLS 1.1, as specified in RFC 4346.
 package tls
 
  import (

コアとなるコードの解説

  1. src/pkg/crypto/tls/generate_cert.go の変更:

    • flag.Int("rsa-bits", 1024, ...) の部分が flag.Int("rsa-bits", 2048, ...) に変更されています。
    • flag.Int はGoの flag パッケージの関数で、コマンドラインフラグを整数型として定義します。
    • 第一引数はフラグ名 ("rsa-bits")、第二引数はデフォルト値 (1024 から 2048 へ変更)、第三引数はフラグの説明です。
    • この変更により、generate_cert.go を実行する際に -rsa-bits フラグを明示的に指定しない場合、生成されるRSA鍵のビット長が自動的に2048ビットになります。これは、より強力な暗号鍵をデフォルトで利用することを促し、セキュリティのベストプラクティスに準拠するためのものです。
  2. src/pkg/crypto/tls/tls.go の変更:

    • ファイルの先頭にあるパッケージコメントが変更されています。
    • // Package tls partially implements TLS 1.0, as specified in RFC 2246. から
    • // Package tls partially implements TLS 1.1, as specified in RFC 4346. への変更です。
    • これはコードの動作に直接的な影響を与えるものではなく、パッケージのドキュメントを更新するものです。このコメントは、crypto/tls パッケージがTLS 1.1の仕様の一部を実装していることを示しており、開発者に対してパッケージの機能範囲を正確に伝えます。これは、GoのTLS実装が進化し、より新しいプロトコルバージョンに対応していることを示す重要な情報です。

関連リンク

参考にした情報源リンク