4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Oracle Cloud] OCI Vault データ暗号化キーを使ったユーザーデータ暗号化

Last updated at Posted at 2020-11-15

はじめに

Oracle Cloud Infrastructure(OCI) には、鍵の生成・管理・ローテーションなどを便利にしてくれる Vault というサービスがあります。Vault を使うことで、面倒な鍵管理のライフサイクルを軽減できます。

... といったことが Document に書いていますが、いまいち何をどう使えば便利になるのかよくわからなかったので、OCI Vault を使ったファイルの暗号化を試してみました。今回はこの手順を紹介していきます。

Vault の作成

まず、OCI Vault を作成していきます。Security - Vault

1605366366410.png

ここで Vault を作成できます。Vault とは、暗号化・復号化を担うマスター暗号化キーを複数格納する論理的な概念です。枠組みが必要なんだな、と思ってもらえれば大丈夫です。

Create Vault

1605366405464.png

MAKE IT VIRTUAL PRIVATE VAULT のチェックを入れると、HSM(鍵管理をしてくれる物理的なHW) を占有できます。占有はそれなりな価格なので、チェックを入れずに進めます。

Create

1605366449362.png

Vault と詳細画面が表示されます。Endpoint は今後使うので、メモをしておくと良いです。

- Cryptographic Endpoint
- https://brp274vvaabe6-crypto.kms.ap-tokyo-1.oraclecloud.com

- Management Endpoint
- https://brp274vvaabe6-management.kms.ap-tokyo-1.oraclecloud.com

1605366657345.png

マスター暗号化キーを作成

次に、Vault の中でマスター暗号化キーを生成します。マスター暗号化キーとは、データ暗号化キーを暗号化・復号化に使うものです。簡単にいうと、データの暗号化に使う鍵に対する、親の概念がマスター暗号化キーです。

こんな感じの考え方です

1605415368535.png

それでは、マスター暗号化キーを作成します。Create Key

1605367341069.png

Create Key

1605367386481.png

詳細画面を見ると、マスター暗号化キーのOCID が確認できます (現在は、このマスター暗号化キーは削除済み)

ocid1.key.oc1.ap-tokyo-1.brp274vvaabe6.abxhiljre3ayxcxxr66zjuoyyjh2ld76dvkf7ogl4dgk6cd4okgbkvv5fi7q

1605367481962.png

データ暗号化キーを生成

マスター暗号化キーを生成したので、次にデータ暗号化の時に使う、データ暗号化キーを生成します。今回の手順では、OCI CLI を使った生成方法を紹介します。

  • key-id : マスター暗号化キーの OCID を指定
  • include-plaintext-key : true を指定
  • endpoint : Vault の Cryptographic Endpoint を指定
  • key-shape : データ暗号化キーのパラメータを指定 : AES の 32byte(256bit)
oci kms crypto generate-data-encryption-key \
--key-id ocid1.key.oc1.ap-tokyo-1.brp274vvaabe6.abxhiljre3ayxcxxr66zjuoyyjh2ld76dvkf7ogl4dgk6cd4okgbkvv5fi7q \
--include-plaintext-key true \
--endpoint https://brp274vvaabe6-crypto.kms.ap-tokyo-1.oraclecloud.com \
--key-shape '
{
  "algorithm": "AES",
  "length": 32
}
'

実行例 (既にこの鍵は削除しています。また、大事なデータは暗号化していません)。

データ暗号化キーが生成されています。1つのデータ暗号化キーが返ってきていますが、暗号化の有無で2つ行が表示されています。

  • ciphertext : データ暗号化キー (暗号化) ※マスター暗号化キーで、暗号化されている
  • plaintext : データ暗号化キー (平文)
{
  "data": {
    "ciphertext": "QQ3XJE+0vKZMABbKgdAZRMp2k8cknCqsKWSLvKzZCLJcM/V4k2ny7zDiG+IJHykdEzS5KlxZlWyt1ywAakScueAMbwYiUwAAAAA=",
    "plaintext": "uD3u9zYtpvVtTNxjzvG3EJTx8XpcceKVqsc9YpOe0Nc=",
    "plaintext-checksum": "1583272555"
  }
}

データ暗号化キー(暗号化) と、データ暗号化キー(平文)の2つが返ってきている理由は、セキュリティを向上できるためです。まず、データ暗号化キー(平文)は、AES の共通鍵となっているため、ファイルの暗号化と復号化が出来ます。つまり、データ暗号化キー(平文) が漏れてしまうと、暗号化されているファイルが復号されてしまう危険性があります。

1605416384595.png

なので、データ暗号化キー(平文)は、暗号化処理のあと、すぐに破棄します。プログラム上のメモリでのみ扱い、ファイル永続化はせずに、すぐ破棄するのが推奨です。

1605416439148.png

データ暗号化キー(平文)を破棄したら、復号化するときにはどうすればいいかというと、データ暗号化キー(暗号化)を OCI Vault に渡すことで、データ暗号化キー(平文)を返してくれます。データ暗号化キー(暗号化)は、マスター暗号化キーで暗号化されているため、OCI Vault だけが復号化出来る、というわけです。

1605416632415.png

データ暗号化をしたいときに、そのつどデータ暗号化キーを生成して暗号化処理をすることで、1個のデータ暗号化キーが暗号化した範囲を小さくできます。暗号化の度に毎回使う鍵を変えているため、セキュリティが高い、というわけです。また、OCI IAM の運用を適切に行うことで、安全な暗号鍵の運用をOCI Vault で行うことができるメリットもあります。

それででは、実際に暗号化と復号化の処理を見て行きましょう。

データ暗号化キー(平文)を使って暗号化

先ほど生成したデータ暗号化キー(平文) を使って、暗号化処理をしていきましょう。まず、暗号化するためのテストファイルを作成します。

cat <<'EOF' > /home/opc/work/rawtext.txt
Hello, OCI Vault! I am test file!
EOF

暗号化の方法はたくさんありますが、今回は簡単に OpenSSL で暗号化をしていきます

  • e : 暗号化の指定 (Encrypt)

  • in : 暗号化したいテストファイル

  • out : 新たに作成する暗号化したファイル

  • pass : データ暗号化キー(平文) を指定

openssl aes-256-cbc -e \
-in /home/opc/work/rawtext.txt \
-out /home/opc/work/encrypted.txt \
-pass pass:uD3u9zYtpvVtTNxjzvG3EJTx8XpcceKVqsc9YpOe0Nc=

生成されるファイルは暗号化されていて、中身を見てもよくわからなくなっています

[opc@vault01 work]$ cat /home/opc/work/encrypted.txt
Salted__��;�`���P{�;
                     ������'��q�eD�Շ2�䭌Ƃ;kf�%u�F���

データ暗号化キー (平文) は、ここで削除します。保管するのは推奨されていません。

データ暗号化キー(暗号化)から、データ暗号化キー(平文)を生成

では次に、暗号化したファイルを復号化していく手順を見て行きましょう。データ暗号化キー(暗号化)を OCI Vault に渡すことで、データ暗号化キー(平文)を返してくれます。データ暗号化キー(暗号化)は、マスター暗号化キーで暗号化されているため、decrypt API を使うことで復号化が出来ます。

  • key-id : マスター暗号化キーの OCID を指定
  • ciphertext : データ暗号化キー(暗号化)の文字列を指定
  • endpoint : Vault の Cryptographic Endpoint を指定
oci kms crypto decrypt \
--key-id ocid1.key.oc1.ap-tokyo-1.brp274vvaabe6.abxhiljre3ayxcxxr66zjuoyyjh2ld76dvkf7ogl4dgk6cd4okgbkvv5fi7q \
--ciphertext "QQ3XJE+0vKZMABbKgdAZRMp2k8cknCqsKWSLvKzZCLJcM/V4k2ny7zDiG+IJHykdEzS5KlxZlWyt1ywAakScueAMbwYiUwAAAAA=" \
--endpoint https://brp274vvaabe6-crypto.kms.ap-tokyo-1.oraclecloud.com 

実行例
データ暗号化キー(平文)が返ってきています

[opc@vault01 work]$ oci kms crypto decrypt \
> --key-id ocid1.key.oc1.ap-tokyo-1.brp274vvaabe6.abxhiljre3ayxcxxr66zjuoyyjh2ld76dvkf7ogl4dgk6cd4okgbkvv5fi7q \
> --ciphertext "QQ3XJE+0vKZMABbKgdAZRMp2k8cknCqsKWSLvKzZCLJcM/V4k2ny7zDiG+IJHykdEzS5KlxZlWyt1ywAakScueAMbwYiUwAAAAA=" \
> --endpoint https://brp274vvaabe6-crypto.kms.ap-tokyo-1.oraclecloud.com
{
  "data": {
    "plaintext": "uD3u9zYtpvVtTNxjzvG3EJTx8XpcceKVqsc9YpOe0Nc=",
    "plaintext-checksum": "1583272555"
  }
}

データ暗号化キー(平文) を使って復号化

では、返ってきたデータ暗号化キー(平文)を使って、暗号化されたファイルを復号化します。

OpenSSL で復号化

  • d : 復号化の指定 (Decrypt)

  • in : 復号化したいファイル

  • out : 新たに作成する復号化したファイル

  • pass : データ暗号化キー(平文) を指定

openssl aes-256-cbc -d \
-in /home/opc/work/encrypted.txt \
-out /home/opc/work/decrypted.txt \
-pass pass:uD3u9zYtpvVtTNxjzvG3EJTx8XpcceKVqsc9YpOe0Nc=

復号化されている

[opc@vault01 work]$ cat /home/opc/work/decrypted.txt
Hello, OCI Vault! I am test file!

はい、これで OCI Vault を使ってセキュアに鍵管理が出来る方法が確認できました。

参考URL

OpenSSL
https://www.slogical.co.jp/tech/openssl_command_aes.html

opensslコマンドで簡単なファイル暗号化
https://qiita.com/ikuwow/items/1cdb057352c06fd3d727

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?