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

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

このコミットは、Go言語の標準ライブラリ crypto/rsa パッケージにおける、古くなったTODOコメントを削除するものです。具体的には、PSS (Probabilistic Signature Scheme) パディングのサポートに関するTODOが削除されています。

コミット

commit ad477e4e2091f9b26114a176e9e722895e7a52fe
Author: Adam Langley <agl@golang.org>
Date:   Tue Jul 16 19:34:21 2013 -0400

    crypto/rsa: remove obsolete TODO.
    
    (PSS support is complete.)
    
    Thanks to Frithjof Schulze for noting this.
    
    R=golang-dev, r
    CC=golang-dev
    https://golang.org/cl/10871046

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

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

元コミット内容

crypto/rsa: remove obsolete TODO. (PSS support is complete.) Thanks to Frithjof Schulze for noting this.

このコミットは、crypto/rsa パッケージから、もはや不要となったTODOコメントを削除するものです。削除されるTODOは、PSS (Probabilistic Signature Scheme) パディングのサポートに関するものであり、コミットメッセージには「PSSサポートは完了した」と明記されています。この変更はFrithjof Schulze氏の指摘によるものです。

変更の背景

Go言語の crypto/rsa パッケージは、PKCS#1 (Public-Key Cryptography Standards #1) に基づくRSA暗号の実装を提供しています。PKCS#1は、RSA暗号の様々な側面、特にパディングスキームについて定義しています。初期のcrypto/rsaの実装では、一部の機能、特に署名におけるPSSパディングのサポートが不足しており、そのためのTODOコメントが存在していました。

このコミットが行われた2013年7月以前に、Go言語のcrypto/rsaパッケージはPSSパディングのサポートを実装し終えていました。そのため、以前に「TODO(agl): Add support for PSS padding.」として残されていたコメントが、もはや現状に即していない「obsolete(時代遅れの、廃止された)」な状態になっていました。

この変更の背景には、Go言語の標準ライブラリが暗号学的機能の完全性と堅牢性を高めるための継続的な努力があります。PSSは、RSA署名のセキュリティを向上させるための重要なパディングスキームであり、その実装が完了したことで、ライブラリの信頼性と実用性が向上しました。Frithjof Schulze氏による指摘は、コードベースのクリーンアップと正確性の維持に貢献しています。

前提知識の解説

RSA暗号

RSA (Rivest–Shamir–Adleman) は、公開鍵暗号方式の一つで、現代のセキュリティにおいて広く利用されています。公開鍵と秘密鍵のペアを使用し、公開鍵で暗号化されたデータは対応する秘密鍵でのみ復号でき、秘密鍵で署名されたデータは公開鍵で検証できます。その安全性は、大きな合成数の素因数分解が困難であるという数学的な問題に基づいています。

PKCS#1

PKCS#1 (Public-Key Cryptography Standards #1) は、RSA暗号アルゴリズムの様々な側面、特に暗号化、復号、署名、検証におけるデータのパディングスキームを定義する標準規格です。パディングは、暗号化されるデータや署名されるデータに特定の構造を追加することで、セキュリティを強化し、特定の攻撃(例えば、選択平文攻撃)を防ぐ役割があります。

PKCS#1 v1.5とPKCS#1 v2.1(RFC 3447)が主要なバージョンです。

PSS (Probabilistic Signature Scheme)

PSS (Probabilistic Signature Scheme) は、PKCS#1 v2.1で導入されたRSA署名のためのパディングスキームです。従来のPKCS#1 v1.5署名スキームと比較して、より強力なセキュリティ特性を提供します。

PSSの主な特徴は以下の通りです。

  1. 確率的 (Probabilistic): 署名生成プロセスにランダムな要素(ソルト)を導入します。これにより、同じメッセージであっても、署名するたびに異なる署名値が生成されます。これは、攻撃者が既知のメッセージと署名のペアから情報を推測することを困難にし、選択メッセージ攻撃に対する耐性を高めます。
  2. 証明可能なセキュリティ (Provable Security): PSSは、特定の数学的な仮定(例えば、RSA問題の困難性)の下で、ランダムオラクルモデルにおいてセキュリティが証明されています。これは、そのセキュリティが理論的に強力であることを意味します。
  3. メッセージリカバリなし: PSSはメッセージリカバリをサポートしません。つまり、署名から元のメッセージを復元することはできません。これは、署名がメッセージのハッシュ値に適用されるためです。

PSSは、特に新しいアプリケーションや、より高いセキュリティ保証が求められる場面で推奨されるRSA署名スキームです。

TODOコメント

プログラミングにおけるTODOコメントは、将来的に実装する必要がある機能、修正すべきバグ、または改善すべき点を示すためにコード内に残されるメモです。これらは通常、開発者が後で対応するために一時的に残すものであり、機能が完成したり、問題が解決されたりした場合には削除されるべきものです。

技術的詳細

このコミットは、Go言語のcrypto/rsaパッケージが、RSA署名におけるPSSパディングのサポートを完全に実装したことを示しています。PSSパディングは、PKCS#1 v2.1で導入された、よりセキュアな署名スキームであり、その実装はRSA署名のセキュリティを強化する上で非常に重要です。

PSSパディングのサポートが完了したということは、crypto/rsaパッケージが、従来のPKCS#1 v1.5署名だけでなく、より現代的で堅牢なPSS署名も生成および検証できるようになったことを意味します。これにより、Goアプリケーションは、より高いセキュリティ要件を持つ環境でRSA署名を利用できるようになります。

コミットメッセージにある「(PSS support is complete.)」という記述は、単にTODOコメントを削除するだけでなく、その背後にある機能開発が完了し、安定した状態になったことを開発コミュニティに伝える役割も果たしています。これは、ライブラリの成熟度と信頼性の向上を示すものです。

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

変更は src/pkg/crypto/rsa/rsa.go ファイルの1箇所のみです。

--- a/src/pkg/crypto/rsa/rsa.go
+++ b/src/pkg/crypto/rsa/rsa.go
@@ -5,8 +5,6 @@
 // Package rsa implements RSA encryption as specified in PKCS#1.
 package rsa
 
-// TODO(agl): Add support for PSS padding.
-
 import (
 	"crypto/rand"
 	"crypto/subtle"

具体的には、以下の2行が削除されています。

// TODO(agl): Add support for PSS padding.

コアとなるコードの解説

このコミットにおけるコードの変更は非常にシンプルで、単一のTODOコメントの削除です。

削除された行 // TODO(agl): Add support for PSS padding. は、crypto/rsaパッケージの初期段階で、将来的にPSSパディングのサポートを追加する必要があることを示すために挿入されたコメントでした。aglは、Go言語の主要な開発者の一人であるAdam Langley氏のイニシャルであり、彼がこのTODOの担当者であったことを示唆しています。

このTODOコメントが削除されたということは、crypto/rsaパッケージが既にPSSパディングの機能を提供しており、このコメントがもはや必要ないことを意味します。これは、Go言語の標準ライブラリが継続的に改善され、機能が追加・完成していく開発プロセスの一環です。コメントの削除は、コードベースのクリーンアップと、機能の完成を明確に示すためのものです。

関連リンク

参考にした情報源リンク