[Oracle Cloud] OCI Vault で非対称鍵(RSA) をさわってみた

# はじめに

OCI Vault では、元々共通鍵(Symmetric Key) だけサポートしていましたが、非対称鍵(asymmetric key) が新たに使えるようになりました。 

https://blogs.oracle.com/cloud-infrastructure/announcing-asymmetric-keys-support-in-oracle-cloud-infrastructure-vault-v2

これによって、インターネットへアクセスできない厳密でセキュアな環境でも、公開鍵を配布することで暗号化が行いやすくなります。

この記事では、非対称鍵の生成と、キーローテーションの影響について確認をしてみます。



# わかったこと

まずはじめに、この検証を通じてわかったことを羅列します。

- 公開鍵は、OCI コンソール上でダウンロード可能
- キーローテーションをしても、古い Key をつかって復号化が可能。ただし、暗号化をした時の Key と暗号化ファイルを紐づけを管理して、復号化時に Key OCID を指定する必要あり



# Vault 作成

まず、OCI Vault を使い始めるために、Vault という概念を作っていきます。

![1612592572068.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/733cb1de-2229-26b4-15d5-e53970571244.png)



適当に名前を入れて Create します。

![1612593989310.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/0af3849a-c6e0-25c8-e9c0-e6aa92500747.png)



すぐに Active になるので、名前をクリックして、Vault の詳細画面へ移動します。

![1612592738212.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/165dc547-c73c-d90b-b8d1-27aec321677b.png)



Vault の詳細画面で、2種類の Endpoint が表示されています。データ暗号・復号に使う Endpoint は「Cryptographic Endpoint」の方です。後で使うのでメモしておきます。

![1612595222169.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/48baa110-cb03-7add-7db3-e3dd7bacf241.png)

```
# Cryptographic Endpoint
https://bvqb4novaabm4-crypto.kms.ap-tokyo-1.oraclecloud.com

# Management Endpoint
https://bvqb4novaabm4-management.kms.ap-tokyo-1.oraclecloud.com
```



# Master Encryption Key 作成

次に、マスター暗号化キーを作成します。

![1612595322871.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/0849b5c0-e40b-aaec-38b6-300e5bc40381.png)



マスター暗号化キーを作るときに、非対称鍵か共通鍵か、そのなかでどういったアルゴリズムか選択します。今回は、暗号化を行いたいので、RSA キーの 4096 bit を選びます。

![1612595370513.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/eb9f441e-6212-6d4d-a94f-5b151f40d3d1.png)


Master Encryption Key が作成されます。 

![1612595473072.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/50af4c4c-a680-be0f-8131-e504ab3aa7fa.png)



Master Encryption Key の詳細画面で OCID がコピーできます。後で使うので、メモっておきましょう。

![1612595561002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/9da2ae06-3028-91d2-7499-2be80e0a9a7d.png)

```
ocid1.key.oc1.ap-tokyo-1.bvqb4novaabm4.abxhiljrf4lrkywkgq6p5p6xqcbbmkwgvi3avewulk4lamo3gs57auwxpi5q
```



RSA キーを使った時の暗号化は、次の2種類の暗号化方式があります。

- Endpoint : インターネット上に公開されている Endpoint を使って暗号化
- 公開鍵 : 公開鍵を配布して、各環境で暗号化

2種類の具体的なやり方を見てみましょう。



# Endpoint を使った暗号化・復号化

## 暗号化

まず、暗号化のための文字列は、Base 64 でエンコードが必要です。適当な文字列をエンコードします。

```
echo -n "Hello, OCI Vault! I am test file" | base64
```



実行例

```
[opc@cli01 ~]$ echo -n "Hello, OCI Vault! I am test file" | base64
SGVsbG8sIE9DSSBWYXVsdCEgSSBhbSB0ZXN0IGZpbGU=
```



OCI CLI を使って、Endpoint を使った暗号化をしていきます

- key-id : Master Encryption Key の OCID を指定
- endpoint : Cryptographic Endpoint を指定
- encryption-algorithm : アルゴリズム関数を指定
- plaintext : Base 64 でエンコード済みの文字列を指定

```
oci kms crypto encrypt \
--key-id ocid1.key.oc1.ap-tokyo-1.bvqb4novaabm4.abxhiljrf4lrkywkgq6p5p6xqcbbmkwgvi3avewulk4lamo3gs57auwxpi5q \
--endpoint https://bvqb4novaabm4-crypto.kms.ap-tokyo-1.oraclecloud.com \
--encryption-algorithm RSA_OAEP_SHA_256 \
--plaintext "SGVsbG8sIE9DSSBWYXVsdCEgSSBhbSB0ZXN0IGZpbGU="
```



実行例です。重要なのは `ciphertext` です。これが暗号化された文字列なので、メモっておきます。

```
[opc@cli01 ocivault]$ oci kms crypto encrypt \
> --key-id ocid1.key.oc1.ap-tokyo-1.bvqb4novaabm4.abxhiljrf4lrkywkgq6p5p6xqcbbmkwgvi3avewulk4lamo3gs57auwxpi5q \
> --endpoint https://bvqb4novaabm4-crypto.kms.ap-tokyo-1.oraclecloud.com \
> --encryption-algorithm RSA_OAEP_SHA_256 \
> --plaintext "SGVsbG8sIE9DSSBWYXVsdCEgSSBhbSB0ZXN0IGZpbGU="
{
  "data": {
    "ciphertext": "yVxpfpVpOPHXbrV4TVGmjCVKAMGw0myg5fdmuaUr+PYnTyW4Xal9v419pA0EkCKZa1qOZJaQd8IFhnZOo12a5SRJQN9tJLxPSn2J5xxqj0BhnzQOWImUt/FDOr3xoqjflYEWv72xFxf9RN6UuPZEC/VMltQz/a2knQoujjewqK7XYd5+pITKnChHvwkQ83EnkVHDClDY8SKGmrlVMlkdZFRqsCbTo+hqaTjDM7/Q2HRbEgM48SGFgTHG/mTVf9iKXgMn5ZJhiJnev6fz0AGPIs57/mraOk+QeXNZjER/6Gk7ky3jSimsithVOpcmGcj0EfJgv0tqqyviqSl0vGOY/Oe/4HNecbZjSz34wSgUCX7YjfIh5F4q95ziFOwIv82Jxk3Rx58RwyUiWSfK8nRQHCDWpCGa1OwU/6NXnumAHJUvzTxDwLi5C4YFg1t1wm4wnAGwRQlwj0WLJ9e7YOXiu8HmAj2+3FuZ0CyHcZPbFn8TIQpjVuHqmEVFPggsujMadim3y1gSEpBOkpD0xDBwlAALlEd+pQ426RCAxY0sVc4H64O2AShJrmTeuFj0pvgy8Wv+Xj7nFID6SQrGm/m96QbF775r1QKZtWTsR82x5kf1Sig4aCFIPnavIOoOxBHwjL2nX7rDX6B8xvScRO5fGSfDjkFGdwLj+paR+11xjwY=",
    "encryption-algorithm": "RSA_OAEP_SHA_256",
    "key-id": "ocid1.key.oc1.ap-tokyo-1.bvqb4novaabm4.abxhiljrf4lrkywkgq6p5p6xqcbbmkwgvi3avewulk4lamo3gs57auwxpi5q",
    "key-version-id": "ocid1.keyversion.oc1.ap-tokyo-1.bvqb4novaabm4.csiwmapebmqaa.abxhiljr2gp3ivspf3xlukltj4abf3ie3wnd4vfl3wt4pwilf2ttwllhd4ca"
  }
}
```



## 復号化

では次に、復号化を確認していきましょう。メモった暗号化済み文字列を `ciphertext` に指定して、復号化を行います。

```
oci kms crypto decrypt \
--key-id ocid1.key.oc1.ap-tokyo-1.bvqb4novaabm4.abxhiljrf4lrkywkgq6p5p6xqcbbmkwgvi3avewulk4lamo3gs57auwxpi5q \
--endpoint https://bvqb4novaabm4-crypto.kms.ap-tokyo-1.oraclecloud.com \
--encryption-algorithm RSA_OAEP_SHA_256 \
--ciphertext "yVxpfpVpOPHXbrV4TVGmjCVKAMGw0myg5fdmuaUr+PYnTyW4Xal9v419pA0EkCKZa1qOZJaQd8IFhnZOo12a5SRJQN9tJLxPSn2J5xxqj0BhnzQOWImUt/FDOr3xoqjflYEWv72xFxf9RN6UuPZEC/VMltQz/a2knQoujjewqK7XYd5+pITKnChHvwkQ83EnkVHDClDY8SKGmrlVMlkdZFRqsCbTo+hqaTjDM7/Q2HRbEgM48SGFgTHG/mTVf9iKXgMn5ZJhiJnev6fz0AGPIs57/mraOk+QeXNZjER/6Gk7ky3jSimsithVOpcmGcj0EfJgv0tqqyviqSl0vGOY/Oe/4HNecbZjSz34wSgUCX7YjfIh5F4q95ziFOwIv82Jxk3Rx58RwyUiWSfK8nRQHCDWpCGa1OwU/6NXnumAHJUvzTxDwLi5C4YFg1t1wm4wnAGwRQlwj0WLJ9e7YOXiu8HmAj2+3FuZ0CyHcZPbFn8TIQpjVuHqmEVFPggsujMadim3y1gSEpBOkpD0xDBwlAALlEd+pQ426RCAxY0sVc4H64O2AShJrmTeuFj0pvgy8Wv+Xj7nFID6SQrGm/m96QbF775r1QKZtWTsR82x5kf1Sig4aCFIPnavIOoOxBHwjL2nX7rDX6B8xvScRO5fGSfDjkFGdwLj+paR+11xjwY="
```



実行例です。`plaintext` に、復号化された Base 64 でエンコードされている文字列が手に入ります。

```
[opc@cli01 ocivault]$ oci kms crypto decrypt \
> --key-id ocid1.key.oc1.ap-tokyo-1.bvqb4novaabm4.abxhiljrf4lrkywkgq6p5p6xqcbbmkwgvi3avewulk4lamo3gs57auwxpi5q \
> --endpoint https://bvqb4novaabm4-crypto.kms.ap-tokyo-1.oraclecloud.com \
> --encryption-algorithm RSA_OAEP_SHA_256 \
> --ciphertext "yVxpfpVpOPHXbrV4TVGmjCVKAMGw0myg5fdmuaUr+PYnTyW4Xal9v419pA0EkCKZa1qOZJaQd8IFhnZOo12a5SRJQN9tJLxPSn2J5xxqj0BhnzQOWImUt/FDOr3xoqjflYEWv72xFxf9RN6UuPZEC/VMltQz/a2knQoujjewqK7XYd5+pITKnChHvwkQ83EnkVHDClDY8SKGmrlVMlkdZFRqsCbTo+hqaTjDM7/Q2HRbEgM48SGFgTHG/mTVf9iKXgMn5ZJhiJnev6fz0AGPIs57/mraOk+QeXNZjER/6Gk7ky3jSimsithVOpcmGcj0EfJgv0tqqyviqSl0vGOY/Oe/4HNecbZjSz34wSgUCX7YjfIh5F4q95ziFOwIv82Jxk3Rx58RwyUiWSfK8nRQHCDWpCGa1OwU/6NXnumAHJUvzTxDwLi5C4YFg1t1wm4wnAGwRQlwj0WLJ9e7YOXiu8HmAj2+3FuZ0CyHcZPbFn8TIQpjVuHqmEVFPggsujMadim3y1gSEpBOkpD0xDBwlAALlEd+pQ426RCAxY0sVc4H64O2AShJrmTeuFj0pvgy8Wv+Xj7nFID6SQrGm/m96QbF775r1QKZtWTsR82x5kf1Sig4aCFIPnavIOoOxBHwjL2nX7rDX6B8xvScRO5fGSfDjkFGdwLj+paR+11xjwY="
{
  "data": {
    "encryption-algorithm": null,
    "key-id": null,
    "key-version-id": null,
    "plaintext": "SGVsbG8sIE9DSSBWYXVsdCEgSSBhbSB0ZXN0IGZpbGU=",
    "plaintext-checksum": "2671769638"
  }
}
```



Base 64 でデコードします。

```
echo -n "SGVsbG8sIE9DSSBWYXVsdCEgSSBhbSB0ZXN0IGZpbGU=" | base64 --decode
```



実行例

```
[opc@cli01 ocivault]$ echo -n "SGVsbG8sIE9DSSBWYXVsdCEgSSBhbSB0ZXN0IGZpbGU=" | base64 --decode
Hello, OCI Vault! I am test file
[opc@cli01 ocivault]$
```



# 公開鍵 を使った暗号化・復号化

## 公開鍵をダウンロード

公開鍵を使った暗号化をしていきましょう。Master Encryption Key の下にある、Versions で View Public Key を選びます。

![1612596859964.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/266a43a2-9d04-ba0a-bb58-9d265286825f.png)



Copy や Download が可能

![1612596894486.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/671f58b3-efe6-68ad-8ee5-85f53572fcd1.png)



これが公開鍵です。メモっておきましょう。

```
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA51Esp+e59Cxfp7YYchFm
aZKgYwOchCRVjHHzXnnvns2+W4imaUUm623NwIhhLWk7pQhVpXELnuSRoUzOpdut
Imp7eB6CX8JKY3tekaX2x+erkeIYZhHnvJDT7n/xla0CglkRrgL32dW2v5zlWwPz
sJRuUBxt0msh+HulYm8FdEbntT35qRY3wz3F94wHw3FHDJNWcsQLyxivufdzZzNE
gvKZnk/DNuMWbqnMEicjTVjUbOSvvH5ELj8LOP2aqWOWOY8B3ng+3K71pXKGDx6k
3xbhAEGU3ADM8J6ww73pe9MGiuf7rP1xLa3tiQaguwwciG+aT2Ug2wWOve5jPMW4
F006C++/TgYgFWN/Iw7Plx9kIeCGjSRLR3HWS0j/x08WpQRqC/8Kyt6ucEFszAFQ
DsjnTZy8CMrawgZMDMT3UPc1cMvCXjKE+/eH5G8DxguG+an6xbYF8RVkZJFJbxse
+HnmT7ERLwlrzALgNUe110zXazOIoed4IzoLcR5QSij8bQqEnv1sTVR0Gdutqmkd
jDkUHqdd3AKdyrwUNPrcyoMcW9bBw+lcUWVgD1yvp3nkg+Ni67hCwlj72yeISY5k
Cg9rdsXU2UQlducbg/FmNRFWtWleV9KHSxQqUWud7TuEolsxpOQiX30RoUd6vY/Q
0ta6fa/kmBs89HbYA/g322ECAwEAAQ==
-----END PUBLIC KEY-----
```



## 暗号化

メモった公開鍵を適当に保存します。

```
mkdir ~/ocivault/
cat <<'EOF' > ~/ocivault/publickey.pem
-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA51Esp+e59Cxfp7YYchFm
aZKgYwOchCRVjHHzXnnvns2+W4imaUUm623NwIhhLWk7pQhVpXELnuSRoUzOpdut
Imp7eB6CX8JKY3tekaX2x+erkeIYZhHnvJDT7n/xla0CglkRrgL32dW2v5zlWwPz
sJRuUBxt0msh+HulYm8FdEbntT35qRY3wz3F94wHw3FHDJNWcsQLyxivufdzZzNE
gvKZnk/DNuMWbqnMEicjTVjUbOSvvH5ELj8LOP2aqWOWOY8B3ng+3K71pXKGDx6k
3xbhAEGU3ADM8J6ww73pe9MGiuf7rP1xLa3tiQaguwwciG+aT2Ug2wWOve5jPMW4
F006C++/TgYgFWN/Iw7Plx9kIeCGjSRLR3HWS0j/x08WpQRqC/8Kyt6ucEFszAFQ
DsjnTZy8CMrawgZMDMT3UPc1cMvCXjKE+/eH5G8DxguG+an6xbYF8RVkZJFJbxse
+HnmT7ERLwlrzALgNUe110zXazOIoed4IzoLcR5QSij8bQqEnv1sTVR0Gdutqmkd
jDkUHqdd3AKdyrwUNPrcyoMcW9bBw+lcUWVgD1yvp3nkg+Ni67hCwlj72yeISY5k
Cg9rdsXU2UQlducbg/FmNRFWtWleV9KHSxQqUWud7TuEolsxpOQiX30RoUd6vY/Q
0ta6fa/kmBs89HbYA/g322ECAwEAAQ==
-----END PUBLIC KEY-----
EOF
```



暗号化したいテストファイルを作成します。

```
cat <<'EOF' > ~/ocivault/rawtext.txt
Hello, OCI Vault! I am test file
EOF
```



取得してきた公開鍵を使って、自分の好きな手法で暗号化をしていきます。この記事では、openssl コマンドを使って暗号化をします。`RSA_OAEP_SHA_256` の暗号化アルゴリズムに合うようなオプションを指定しています。

また、Base 64 でエンコードもしたあとで、暗号化ファイルを出力しています。

- encrypt : 暗号化をする
- pubin : 公開鍵を使う
- inkey : 公開鍵のファイルパス
- in : 暗号したいファイル

```
openssl pkeyutl \
-encrypt \
-pubin \
-inkey ~/ocivault/publickey.pem \
-in ~/ocivault/rawtext.txt \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha256 \
-pkeyopt rsa_mgf1_md:sha256 | base64 -w0 > ~/ocivault/encrypted.txt
```



暗号化されています

```
[opc@cli01 ocivault]$ cat ~/ocivault/encrypted.txt
Q5vv4bt5T4kaEjlB/bFxb0GcV7L9pSxKVol2H5ebnDgz1lEiQt57ziB34sae/2vAgb+OYAGZdH8zTqsganSxFU7U3hDxytf2K7FY0x/lgOaQrTVgN00iGDApND78Z+NGdFC1NXbqG7Y74zjzYbM23Stz2UmhWcylKXVh2+RSldQHIJG8klIhkPJczTCusOpi/WUxvxSV1qrSrbJFOeks5lqm+pZoUJ1GJPJu6ethnz88Rvpfn1fKC96SO9GDpsrcZwq8TnsPLISKkG0wgaxMSHw3o4XPKS2gDASQ+ABbMc+5reeY82ZOn2SqwwKI2I0xcJY8zD/Ug6OnEwKtd1em4+GSvlD3NB2d08KdXjcuCh/drARmwBSpgpHTeRxmvTdPQfF1728K/wEklhGt12rrgzZMUo9o6D/c+GAYuT/YRI/wTsMJXxvurbhbFUBaP/HO2XCNJxnu5QehtiqqE2y0R8P92NN50U57Iae09LJQW0Gn5UnhxdN1eeMRkTjOlSnmgOPCQLFE5nMSRl+mq/aZHbncifIIt1lHoVCZ0/CJ72mlUkPmozve2Z/aHt1qyzBCs054y5KkTbY9IRlf0/3Jkw/h2N0o5ZSV6Zf5+cdQU92PruTw/T3x5GXVLK1bC1f5I/641N336GpLii+boR5pZUizT0R1dqS3EQhIje6dSzg=
[opc@cli01 ocivault]$
```



## 復号化

openssl コマンドで暗号化したファイルを、OCI Vault で復号化をします。`ciphertext` には、暗号化された Base 64 でエンコード済みの文字列を渡します。ファイルパス指定が出来ないので、コマンド展開する形で文字列を渡しています。

```
oci kms crypto decrypt \
--key-id ocid1.key.oc1.ap-tokyo-1.bvqb4novaabm4.abxhiljrf4lrkywkgq6p5p6xqcbbmkwgvi3avewulk4lamo3gs57auwxpi5q \
--endpoint https://bvqb4novaabm4-crypto.kms.ap-tokyo-1.oraclecloud.com \
--encryption-algorithm RSA_OAEP_SHA_256 \
--ciphertext $(cat ~/ocivault/encrypted.txt)
```



実行例です。`plaintext` には、復号化された文字列が返ってきてます。Base 64 でエンコードされています。

```
[opc@cli01 ocivault]$ oci kms crypto decrypt \
> --key-id ocid1.key.oc1.ap-tokyo-1.bvqb4novaabm4.abxhiljrf4lrkywkgq6p5p6xqcbbmkwgvi3avewulk4lamo3gs57auwxpi5q \
> --endpoint https://bvqb4novaabm4-crypto.kms.ap-tokyo-1.oraclecloud.com \
> --encryption-algorithm RSA_OAEP_SHA_256 \
> --ciphertext $(cat ~/ocivault/encrypted.txt)
{
  "data": {
    "encryption-algorithm": null,
    "key-id": null,
    "key-version-id": null,
    "plaintext": "SGVsbG8sIE9DSSBWYXVsdCEgSSBhbSB0ZXN0IGZpbGUK",
    "plaintext-checksum": "3762666646"
  }
}
[opc@cli01 ocivault]$
```



Base 64 でデコードしてみます。

```
echo -n "SGVsbG8sIE9DSSBWYXVsdCEgSSBhbSB0ZXN0IGZpbGUK" | base64 --decode
```



実行例です。無事に復号できていますね。

```
[opc@cli01 ocivault]$ echo -n "SGVsbG8sIE9DSSBWYXVsdCEgSSBhbSB0ZXN0IGZpbGUK" | base64 --decode
Hello, OCI Vault! I am test file
[opc@cli01 ocivault]$
```



# Key ローテーション

キーローテーションで、暗号化・復号化の処理にどのような影響が出るか見てみましょう。

![1612613196809.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/5d3da49f-5c03-554c-e4b5-6f84d8d556a8.png)



Rotate Key

![1612613234152.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/a816adf7-451d-5c15-fbe7-68814aed435b.png)



新しい Key が Creating になる

![1612613316172.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/49eae9fc-ae3b-3d58-d7af-7119c13083e2.png)



2 つが Active になる

![1612613356439.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/28dfc567-40c8-a0b3-c5ec-7bb786f0571a.png)



キーローテーション前に暗号化されたファイルの復号化の方法を確認していきます。

次の2パターンを見て行きましょう。

- Endpoint で暗号化

- Public で OpenSSL 暗号化



## Endpoint

Endpoint 直接で復号化です。まず、普通に使ってきた複合化のコマンドを実行してみます。

```
oci kms crypto decrypt \
--key-id ocid1.key.oc1.ap-tokyo-1.bvqb4novaabm4.abxhiljrf4lrkywkgq6p5p6xqcbbmkwgvi3avewulk4lamo3gs57auwxpi5q \
--endpoint https://bvqb4novaabm4-crypto.kms.ap-tokyo-1.oraclecloud.com \
--encryption-algorithm RSA_OAEP_SHA_256 \
--ciphertext "JBUn2UGX+5JzRBDNLH4Zur2UGheV1IpsiJ9ngh7sXJHuIa3OaZDvEGfOgYMvLZyG+sGyxtiGEY5rW/XWeJO2SXdSeHFgFNUCIcxbMNjK9xTeI4mMzRC4k/eNH/pZqZ1bd9FN1tReNZKpsJQdrYfFhGedAjHm0N15+Z1327EaYf0CadjbnVmzWBt/JzAE+wV+rn3eV5h9u5Bo5A0BmslKPw5YGUsTFVCmiu9/gL6OrGaWG4xvkL9lF4WF6eCD54HefCwcJM4TPgIk9n6nUw25car9FDWNvbfzqaMIefwQdKvKtg3/grzApDp7gW3Kt3GITXXMI8sqHHVu4aRZd4mtpgOZ4BbLGc6otCQusm/J1GPPNzFVc45NHPCYnin7lmGGl3/Pgtk2EtEEdqoHvX3lKWoCIDcDzFu4ZwHRqztdSq3TXymLy3WiU3Gwc9XS6L7ch4xYvNXKMen1dnKvh1GBIO2DKxkJ9s2YRse7J6TdVrvI8zgld5aRXEenbdhFvLqel9c9mMAJNPxuzuE4A3bJ3D7ZFJcxChLwNhFltAe2wB0YIZMrXQUkwn2Xj/Bl2XKC5ttCT4GJLWrq2VbiQKYvTX+NTLcbA+MEu8POi/dwJgppnJZ+xEq8G7PapLaSOYhIeKeFZWTR4DjwKAP2czqdcOAowZlHvJWT+2Hqwc5gY90="
```



Service Error で、Bad input が返ってきます。

```
ServiceError:
{
    "code": "InvalidParameter",
    "message": "Bad input.",
    "opc-request-id": "73DFCF491E7342ECA5937852840FA0E5",
    "status": 400
}
[opc@cli01 ocivault]$
```



キーローテーションで古い鍵をつかって復号化する場合、その時につかった Key Versions の OCID が必要です。Endpoint を使って暗号化したときの Response だったり、OCI Console 上で確認できます。

![1612628382174.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/fbd94d29-32f1-2852-f454-0f1ed4396a8b.png)



OCI CLI の復号化のときに、新たに `--key-version-id` を指定します。これで、過去使用していた鍵を指定することで、復号化できます。

```
oci kms crypto decrypt \
--key-id ocid1.key.oc1.ap-tokyo-1.bvqb4novaabm4.abxhiljrf4lrkywkgq6p5p6xqcbbmkwgvi3avewulk4lamo3gs57auwxpi5q \
--key-version-id ocid1.keyversion.oc1.ap-tokyo-1.bvqb4novaabm4.csiwmapkdqyaa.abxhiljrze752jwrqbdffnzddn2sh3ge77advzvmct5gqlv7yt5iwdjxtdrq \
--endpoint https://bvqb4novaabm4-crypto.kms.ap-tokyo-1.oraclecloud.com \
--encryption-algorithm RSA_OAEP_SHA_256 \
--ciphertext "JBUn2UGX+5JzRBDNLH4Zur2UGheV1IpsiJ9ngh7sXJHuIa3OaZDvEGfOgYMvLZyG+sGyxtiGEY5rW/XWeJO2SXdSeHFgFNUCIcxbMNjK9xTeI4mMzRC4k/eNH/pZqZ1bd9FN1tReNZKpsJQdrYfFhGedAjHm0N15+Z1327EaYf0CadjbnVmzWBt/JzAE+wV+rn3eV5h9u5Bo5A0BmslKPw5YGUsTFVCmiu9/gL6OrGaWG4xvkL9lF4WF6eCD54HefCwcJM4TPgIk9n6nUw25car9FDWNvbfzqaMIefwQdKvKtg3/grzApDp7gW3Kt3GITXXMI8sqHHVu4aRZd4mtpgOZ4BbLGc6otCQusm/J1GPPNzFVc45NHPCYnin7lmGGl3/Pgtk2EtEEdqoHvX3lKWoCIDcDzFu4ZwHRqztdSq3TXymLy3WiU3Gwc9XS6L7ch4xYvNXKMen1dnKvh1GBIO2DKxkJ9s2YRse7J6TdVrvI8zgld5aRXEenbdhFvLqel9c9mMAJNPxuzuE4A3bJ3D7ZFJcxChLwNhFltAe2wB0YIZMrXQUkwn2Xj/Bl2XKC5ttCT4GJLWrq2VbiQKYvTX+NTLcbA+MEu8POi/dwJgppnJZ+xEq8G7PapLaSOYhIeKeFZWTR4DjwKAP2czqdcOAowZlHvJWT+2Hqwc5gY90="
```



先ほどまでエラーになっていましたが、正常に復号化が出来ました

```
{
  "data": {
    "encryption-algorithm": null,
    "key-id": null,
    "key-version-id": null,
    "plaintext": "SGVsbG8sIE9DSSBWYXVsdCEgSSBhbSB0ZXN0IGZpbGU=",
    "plaintext-checksum": "2671769638"
  }
}
```



念のため Base 64 のデコードもしてみて、正常に復号できることが分かります。

```
[opc@cli01 ~]$ echo -n "SGVsbG8sIE9DSSBWYXVsdCEgSSBhbSB0ZXN0IGZpbGU=" | base64 --decode
Hello, OCI Vault! I am test file
```



## Public Key

Public Key で暗号化している場合も同様に、通常の復号化コマンドではエラーになります。

```
oci kms crypto decrypt \
--key-id ocid1.key.oc1.ap-tokyo-1.bvqb4novaabm4.abxhiljrf4lrkywkgq6p5p6xqcbbmkwgvi3avewulk4lamo3gs57auwxpi5q \
--endpoint https://bvqb4novaabm4-crypto.kms.ap-tokyo-1.oraclecloud.com \
--encryption-algorithm RSA_OAEP_SHA_256 \
--ciphertext $(cat ~/ocivault/encrypted.txt)
```



InvalidParameter が返ってきます。

```
{
    "code": "InvalidParameter",
    "message": "Bad input.",
    "opc-request-id": "F0FA5A1BAC6A491FB90E03FC5A0D54DA",
    "status": 400
}
```



先ほどと同様に、新たに `--key-version-id` を指定すると、正常に復号化できます

```
oci kms crypto decrypt \
--key-id ocid1.key.oc1.ap-tokyo-1.bvqb4novaabm4.abxhiljrf4lrkywkgq6p5p6xqcbbmkwgvi3avewulk4lamo3gs57auwxpi5q \
--key-version-id ocid1.keyversion.oc1.ap-tokyo-1.bvqb4novaabm4.csiwmapkdqyaa.abxhiljrze752jwrqbdffnzddn2sh3ge77advzvmct5gqlv7yt5iwdjxtdrq \
--endpoint https://bvqb4novaabm4-crypto.kms.ap-tokyo-1.oraclecloud.com \
--encryption-algorithm RSA_OAEP_SHA_256 \
--ciphertext $(cat ~/ocivault/encrypted.txt)
```

```
{
  "data": {
    "encryption-algorithm": null,
    "key-id": null,
    "key-version-id": null,
    "plaintext": "SGVsbG8sIE9DSSBWYXVsdCEgSSBhbSB0ZXN0IGZpbGUK",
    "plaintext-checksum": "3762666646"
  }
}
```



念のため Base 64 のデコードもしてみて、正常に復号できることが分かります。

```
[opc@cli01 ~]$ echo -n "SGVsbG8sIE9DSSBWYXVsdCEgSSBhbSB0ZXN0IGZpbGUK" | base64 --decode
Hello, OCI Vault! I am test file
```



# Key 削除

Key Versions で過去のキーを削除したときの影響を確認しましょう。復号化が出来なくなると予想していますが、改めて確認してみましょう。

![1612629086047.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/ab1449e2-9495-fc0e-248d-626e61cfdc3a.png)



確認用のコードと、削除の日付を指定します。削除の日付は、7日後~30日後の範囲で選択できます。すぐに削除は出来ないので注意しましょう。

![1612629214268.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/efc4e16b-479a-6a5f-175d-bef64bd57947.png)



Pending になります。

![1612629392420.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/10828790-dad6-6f00-7099-863d8e385683.png)



Todo Update



# 参考URL

https://blogs.oracle.com/cloud-infrastructure/announcing-asymmetric-keys-support-in-oracle-cloud-infrastructure-vault-v2

https://docs.oracle.com/en-us/iaas/Content/KeyManagement/Concepts/keyoverview.htm#concepts

https://qiita.com/sugimount/items/c26a304d053445b87263