電子署名

デジタルデータの作成者の本人性と、データが改ざんされていないことを暗号技術で証明する仕組み。公開鍵暗号とハッシュ関数を組み合わせて実現される。

電子署名 (digital signature) は、デジタル文書の「誰が作成したか」(認証) と「内容が改ざんされていないか」(完全性) を暗号技術で保証する仕組みです。紙の文書における手書きの署名や印鑑に相当しますが、暗号学的な裏付けがあるため、偽造が極めて困難です。電子契約、ソフトウェアの配布、電子メールの認証など、デジタル社会の信頼基盤として機能しています。

電子署名の仕組みは 3 ステップです。第一に、署名者は文書のハッシュ値 (固定長のダイジェスト) を計算します。第二に、そのハッシュ値に署名者の秘密鍵で署名演算を施し、署名データを生成します。第三に、検証者は署名データと署名者の公開鍵、そして文書から計算し直したハッシュ値を検証アルゴリズムに与え、整合するかを判定します。整合すれば、文書がその秘密鍵の持ち主によって署名され、署名後に改ざんされていないことが確認できます。なお「ハッシュ値を秘密鍵で暗号化する」という説明が広く流布していますが、これは RSA に限った類推です。ECDSA や Ed25519 では署名と検証は暗号化・復号とはまったく別の演算で、復号に相当する処理は存在しません。

文字数と電子署名の関係は、ハッシュ関数の性質に表れます。SHA-256 は入力データの長さに関係なく、常に 256 ビット (64 文字の 16 進数) のハッシュ値を出力します。1 文字のテキストでも 100 万文字のテキストでも、ハッシュ値の長さは同じです。しかし、入力テキストが 1 文字でも変わればハッシュ値はまったく異なる値になるため、改ざんの検出が可能です。

電子署名のデータサイズは、使用するアルゴリズムによって異なります。RSA-2048 の署名は 256 バイト、ECDSA (P-256) の署名は生の値 (r と s の連結) で 64 バイト、実際の流通形式である DER エンコードでは 70〜72 バイト程度です。署名データは文書に付加されるため、文書全体のサイズが増加します。PDF の電子署名では、署名データに加えて証明書チェーンやタイムスタンプも埋め込まれるため、数 KB〜数十 KB のサイズ増加があります。

日本では電子署名法 (電子署名及び認証業務に関する法律・2000 年公布、2001 年 4 月施行) により、本人による一定の要件を満たす電子署名が行われた電磁的記録は、真正に成立したものと推定されます。押印のある紙の文書と同じ扱いになるという意味で、裁判で争われたときに「本人が作ったものではない」と主張する側が立証の負担を負う、という効果です。署名があれば契約内容そのものが常に有効になる、という意味ではありません。電子契約サービス (クラウドサイン、DocuSign、Adobe Sign など) は、この法的枠組みの上に構築されています。契約書の文字数が多くても少なくても、電子署名の法的効力は変わりません。

実務上の落とし穴は、署名の検証が通ることと署名者が本人であることが別問題だという点です。検証で確認できるのは「この公開鍵と対になる秘密鍵で署名された」ことだけで、その公開鍵が誰のものかは署名だけでは決まりません。そこを埋めるのが認証局の発行する証明書で、証明書チェーンをたどって信頼できる認証局まで到達できるか、失効していないかを確認して初めて本人性の話になります。もう一つは時間の扱いです。証明書には有効期限があり、期限切れや鍵の危殆化のあとでは「署名した当時は有効だった」ことを示せなくなるため、長期保存が必要な文書にはタイムスタンプを併用します。

コードサイニング (コード署名) は、ソフトウェアの配布に電子署名を適用したものです。アプリケーションの実行ファイルに署名することで、開発者の身元とコードの完全性を保証します。署名されていないソフトウェアは OS が警告を表示するため、ユーザーの信頼を得るためにコードサイニングは事実上必須です。

この記事を共有