電子署名・長期署名って何？

# はじめに
仕事で長期署名について触る機会があったので、ここで長期署名・電子署名についてまとめたいと思います。
これらは利用する技術が多いため、一つづつ説明します。

# 参考サイト
今回参考にしたサイトは、下記のとおりです。

- [ネットワークエンジニアとして | 共通鍵暗号と公開鍵暗号とは](https://www.infraexpert.com/study/security4.html)
- [ネットワークエンジニアとして | デジタル署名の仕組み](https://www.infraexpert.com/study/security6.html)
- [総務省 | 電子署名・認証・タイムスタンプ その役割と活用](https://www.soumu.go.jp/main_sosiki/joho_tsusin/top/ninshou-law/pdf/090611_1.pdf)

# 公開鍵暗号方式
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/ed4bd84e-82aa-c79b-d637-3893acbd0b5a.png)
[ネットワークエンジニアとして | 共通鍵暗号と公開鍵暗号とは](https://www.infraexpert.com/study/security4.html)
割とポピュラーな技術なので知っている人も多いかもしれません。公開鍵暗号方式は「公開鍵」と「秘密鍵」という2つの鍵を使用した暗号化方式です。

- 公開鍵：暗号化のために使用する。第三者に公開する鍵。
- 秘密鍵：復号のために使用する。非公開の鍵。

公開鍵を使って誰でも暗号化できますが、復号するための秘密鍵は1つだけで、これは鍵の作成者本人しか保持しません。仮に盗聴されていたとしても、本人以外は復号できません。ここまでは暗号化通信のお話ですが、次は電子署名における、「公開鍵」と「秘密鍵」のお話です。

# 電子署名
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/eaaec3e9-9d6c-84f1-5602-2df4639da15a.png)

[総務省 | 電子署名・認証・タイムスタンプ その役割と活用](https://www.soumu.go.jp/main_sosiki/joho_tsusin/top/ninshou-law/pdf/090611_1.pdf)
実は**秘密鍵でも暗号化が可能で、その暗号化したメッセージは公開鍵で復号できるんです！**と言いたいところですが、正確には異なります。こちらに詳細が書いてあります。

[「電子署名=『秘密鍵で暗号化』」という良くある誤解の話](https://qiita.com/angel_p_57/items/d7ffb9ec13b4dde3357d#%E7%BD%B2%E5%90%8D%E3%81%AE%E8%AA%AC%E6%98%8E%E6%A1%88)

ざっくりとした理解になりますが、**秘密鍵で行っていることはあくまで復号の処理で、平文に対して復号の処理を行うことで、別の文字列に変換、公開鍵の暗号化によって平文に戻す**というのが正確な処理なようです。ただ、図の表記と異なってしまうため以下の文章では「秘密鍵で暗号化」「公開鍵で復号」というように表記します。

そもそも、秘密鍵で暗号化しても、公開鍵を使って復号できるので意味がないように見えますが、逆に言えば秘密鍵を持っている人でなければ暗号化できないので、それによって**どのユーザによって作成したかを担保できる**という仕組みのようです。

## 事前の処理
- 1.ユーザAは、予め各種情報(Aの公開鍵や、各種証明書)を認証局に申請する。
- 2.認証局は提出した公開鍵を用いて電子証明書をユーザAに発行する。
- 3.ユーザAは発行された電子証明書を受領する。
- 4.電子証明書が執行した場合、認証局はその情報をリポジトリに登録する。

## 電子署名時の処理
- 1.ユーザAが作成したと証明したい電子データ(平文)からハッシュ値を生成。
- 2.そのハッシュ値に対してユーザAの秘密鍵を用いて暗号化を実施する。これを電子署名という。
- 3.電子証明書と電子署名を結合。
- 4.結合したデータをユーザBに送信する。
- 5.ユーザBは、認証局を介して電子証明書の有効性を確認する。
- 6.受け取ったデータの電子データ(平文)からハッシュ値を生成。
- 7.電子署名書の公開鍵を利用して、電子署名を復号、ハッシュ値を取得する。
- 8.6/7のハッシュ値を比較し、同一であれば改ざんされておらず、ユーザAが作成したものと判断できる。

もう少し詳しい内容は [ネットワークエンジニアとして | デジタル署名の仕組み](https://www.infraexpert.com/study/security6.html) に書かれています。
これによって、作成者本人によってその電子データに署名がされているというのは確認できます。ただ、これだけではいつ作成されたかが分かりません。いつ作成されたかを記録するために、次に説明する「タイムスタンプ」という技術があります。

# タイムスタンプ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/17a6fc42-c226-e013-7dec-7c074af2a5de.png)
[総務省 | 電子署名・認証・タイムスタンプ その役割と活用](https://www.soumu.go.jp/main_sosiki/joho_tsusin/top/ninshou-law/pdf/090611_1.pdf)
電子署名はあるユーザによって電子データが作成されたことを担保しますが、タイムスタンプではどの時点で作成されたかを担保します。

- 1.利用者は電子データからハッシュ値を作成、時刻認証局へ送付。
- 2.時刻承認局は送付されたハッシュ値に対して時刻情報を付与したものを発行。
- 3.上記の発行されたデータと、電子データから作成したハッシュを比べれば、改ざんされていないか検証できる。

これによりいつ電子データが作成されたかを証明できるようになりました。
この「タイムスタンプ」と、前に説明した「電子署名」は組み合わせることができます。

# 長期署名
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/b387bf98-2833-1cab-923f-74bceafc8644.png)
[総務省 | 電子署名・認証・タイムスタンプ その役割と活用](https://www.soumu.go.jp/main_sosiki/joho_tsusin/top/ninshou-law/pdf/090611_1.pdf)
電子署名には有効期限があり、1~2年程度です。そのため長期に渡って有効性を保つためには別の仕組みが必要になります。長期署名では、「電子署名」＆「タイムスタンプ」を使い長期に渡って署名の有効性を保ちます(10年)。

[株式会社Too | 電子署名には有効期限がある！長期契約を結ぶための方法とは](https://www.too.com/fun/blog/work/e-sign-effective-date.html)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149438/d49e9331-d499-cbef-1c75-a59fa9f64877.png)
[総務省 | 電子署名・認証・タイムスタンプ その役割と活用](https://www.soumu.go.jp/main_sosiki/joho_tsusin/top/ninshou-law/pdf/090611_1.pdf)

# まとめ
これらは概要で、特に電子署名部分は突き詰めていくと、より複雑な処理が実施されているようです。ただ電子署名・長期署名の概要を理解するだけであれば、上記の概念を把握していればひとまず良さそうです。