KMSでSecp256k1の署名と検証（前編）

# はじめに（Introduction）

BitcoinやEthereumでは署名にECDSA（楕円曲線DSA）を用いています。
そこで使用される、楕円曲線はSecp256k1と呼ばれるパラメータです。
AWS Key Management Service (AWS KMS) では、Secp256k1のECDSAを用いることが出来るのでこれをJavaを使用して署名、検証を行います。

筆者は、AWSもEthereumも素人なので、そこら辺の間違いについてはご指摘いただけるとありがたいです。

記事が長くなってしまったので、前編、[後編](https://qiita.com/tnakagawa/items/8e7277aed49f279655f8)にわけて投稿します。
この記事は、AWS KMSで鍵を作るまでの手順となります。

# IAMユーザー作成

AWSのIAMユーザーを作成します。
内容としては、ユーザーを追加して、「AWSKeyManagementServicePowerUser」の権限を持つグループに所属させます。
最終的にIAMユーザーの「**アクセスキーID**」と「**シークレットアクセスキー**」を取得します。

## IAM画面へ遷移

①：左上の「■サービス」を押下します。
②：メニューから「セキュリティ、ID、およびコンプライアンスデータベース」を押下します。
③：一覧から「IAM」を押下します。（スクロールの必要あり）

![2022-09-08_09h09_53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/10b61f40-04fb-e031-e75d-2dedd4c4f675.png)

## ユーザー

①：「IAM ダッシュボード」の左メニュー「アクセス管理」「ユーザー」を押下します。
②：右上の「ユーザーを追加」を押下します。

![2022-09-08_09h10_22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/c99977b7-b67a-1928-9ee0-a4b4ca96da8a.png)

## ユーザーを追加①

①：「ユーザー名」に名前を設定します。（例：test_user）
②：「AWS認証情報タイプを選択」は「アクセスキー・プログラムによるアクセス」を選択します。
①：「次のステップ：アクセス権限」を押下します。

![2022-09-08_09h10_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/370d3fe1-bc2f-e897-f91c-75809077ef64.png)

## ユーザーを追加②

①：「グループの作成」を押下します。

![2022-09-08_09h11_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/303d9adb-8bf4-6deb-f7b6-2c0af2ec912d.png)

## グループの作成

①：「グループ名」に名前を設定します。（例：test_group）
②：ポリシーのフィルタを利用して「AWSKeyManagementServicePowerUser」のみをフィルタします。（例：KeyM）
③：「AWSKeyManagementServicePowerUser」に☑を入れます。
④：「グループの作成」を押下します。

![2022-09-08_09h11_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/dc688998-310d-4547-f5d7-ceb261e3160f.png)

## ユーザーを追加②

①：「AWSKeyManagementServicePowerUser」ポリシーを持つグループに☑を入れます。（例：test_group）
②：「次のステップ：タグ」を押下します。

![2022-09-08_09h12_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/83ddab0e-2e23-e50a-0981-122251033bdd.png)

## ユーザーを追加③

※：タグの追加（オプション）は設定しません。

①：「次のステップ：確認」を押下します。

![2022-09-08_09h12_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/d43fe205-2dc1-aac6-837f-d8c8cffe09e4.png)

## ユーザーを追加④

①：内容を確認して「ユーザーの作成」を押下します。

![2022-09-08_09h12_24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/773b41e8-e310-daf7-fcc4-8ce4d896b4ef.png)

## ユーザーを追加⑤

「アクセスキーID」と「シークレットアクセスキー」を自身のみの環境へ保存します。

①：「閉じる」を押下します。

![2022-09-08_09h12_34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/7c43207c-3a59-5e0d-01d5-28e50077434b.png)

# キーの作成（KMS）

「キーの作成」を行います。
内容としては、「キーのタイプ」が「非対称」、「キーの使用」が「署名および検証」、「キーの仕様」が「ECC＿SECG_P256K1」の鍵を生成し、「キーの使用アクセス許可を定義」でIAMで作成したユーザーを選択します。
最終的に作成したキーの「**キーID**」を取得します。

## Key Management Serviceへ遷移

①：左上の「■サービス」を押下します。
②：メニューから「セキュリティ、ID、およびコンプライアンスデータベース」を押下します。
③：一覧から「Key Management Service」を押下します。（スクロールの必要あり）

![2022-09-08_09h14_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/4fa0e8f5-fa40-3b87-a894-b23cadee467a.png)

## キーの作成

①：AWSのリージョンを「アジアパシフィック (東京)　ap-northeast-1」（表示は「東京」）にします。
②：「キーの作成」を押下します。

![2022-09-08_09h51_42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/081c24f7-f534-2221-41fc-928bc13b8720.png)

## キーを設定

①：「キーのタイプ」は「非対称」を選択します。
②：「キーの使用」は「署名および検証」を選択します。
③：「キーの仕様」は「ECC_SECG_P256K1」を選択します。
④：「次へ」を押下します。

![FireShot Capture 104 - KMS Console - ap-northeast-1.console.aws.amazon.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/8f5e33b5-91d5-2383-0512-53984fd3b3bb.png)

## ラベルを追加

①：「エイリアス」を設定します。（例：test_kms）
②：「次へ」を押下します。

![FireShot Capture 106 - KMS Console - ap-northeast-1.console.aws.amazon.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/089e83be-aef3-e06c-cf0d-ee74a8f5e451.png)

## キーの管理アクセス許可を定義

①：「キー管理者」の「AWSServiceRoleForSupport」を☑します。
②：「キー管理者」の「AWSServiceRoleForTrustedAdvisor」を☑します。
③：「次へ」を押下します。

![2022-09-08_09h58_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/d12f615a-b727-19be-3369-92d9d8b69da9.png)

## キーの使用アクセス許可を定義

①：「このアカウント」のIAMで作成したユーザーを☑します。（例：test_user）
②：「このアカウント」の「AWSServiceRoleForSupport」を☑します。
③：「このアカウント」の「AWSServiceRoleForTrustedAdvisor」を☑します。
④：「次へ」を押下します。

![FireShot Capture 107 - KMS Console - ap-northeast-1.console.aws.amazon.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/214606c9-dea3-426f-ed9a-0e3532d5cc9c.png)

## 確認

①：内容を確認して「完了」を押下します。

![FireShot Capture 108 - KMS Console - ap-northeast-1.console.aws.amazon.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/56136771-fc9c-1cb4-dd4e-afaadf32dd1d.png)

## 完了

①：キーの作成が完了したので、「キーID」を取得します。

![2022-09-08_10h00_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29914/5c6496f1-f100-0913-35cc-d6418712c3fc.png)

# まとめ

前編はここまでです。
後編はここで作成したIAMユーザの「**アクセスキーID**」と「**シークレットアクセスキー**」、
KSMで作成した鍵の「**キーID**」を利用して、Javaで署名と検証を行います。

[後編はこちら](https://qiita.com/tnakagawa/items/8e7277aed49f279655f8)