パスワードの難読化

Posted on 2017/09/27

ToC

最近、レンタルサーバーの移行をしました。 ながらく放置されているコンテンツをあらためて整理しなおし、ついでに小さな見直しもしてみました。
そのなかの1つの改善で、シェルスクリプトの平文パスワードの難読化もやってみました。

おはずかしながら…

あるシェルスクリプト処理でサービス接続用にパスワードが必要なのですが、パスワードが平文で むき出しな状態になっていました。

いろいろな理由があってのことだと思いますが、ありがちなパターン。こんな感じですね。

#!/bin/bash
 
USER_NAME="my_user_name" 
PASSWORD="this_is_plain_text_password_1234"

これは、あまりにも脆弱すぎるのでセキュアにしておきたい。

いろいろな前提が必要となる仕組みだと、レンタルサーバーの範疇でできなかったり、 大事な情報とは言ってもそこそこなので、簡単な改善でできることは何かと考えて opensslを使った難読化を考えました。

秘密鍵を作成

秘密鍵はopensslのコマンドで作成が可能です。

鍵長を引数として指定するのですが、1024と書いてあるサイトが結構たくさんあります。 あまり今回の目的では、大きな違いはないと思いますが、世の中のオススメに従い2048ビット以上に しました。詳細は、従来の暗号技術の危険性の サイトが、詳しいです。

$ openssl genrsa 3072 > private-key.pem
Generating RSA private key, 3072 bit long modulus
............++
..........................................................................++
e is 65537 (0x10001)

ちゃんと3072ビットの鍵長の秘密鍵ができているようです。

$ openssl rsa -text < private-key.pem
Private-Key: (3072 bit)
modulus:
    00:ca:a6:72:c4:b9:85:97:d3:61:ec:3b:bc:74:6f:
    d6:40:08:6c:9a:30:b8:5a:30:23:d1:13:e5:7d:7a:
    -続く-

作成した秘密鍵を使って、平文を難読化

早速、難読化をしてみましょう。 opensslコマンドで、難読化パスワードファイル(pass.rsa)を作成します。

$ echo 'this_is_plain_text_password_1234' | openssl rsautl -encrypt -inkey private-key.pem > pass.rsa

ちなみに復号は下記のコマンドで可能です。 確かに復号できていますね。

$ openssl rsautl -decrypt -inkey private-key.pem -in pass.rsa
this_is_plain_text_password_1234

ちなみにですが、異なる秘密鍵で暗号化した難読化パスワードファイル(pass2.rsa)を 複合しようとすると、エラーになります。大丈夫そうですね。

$ openssl rsautl -decrypt -inkey private-key.pem -in pass2.rsa
RSA operation error
34381005096:error:0407109F:rsa routines:RSA_padding_check_PKCS1_type_2:pkcs decoding error:rsa_pk1.c:273:
34381005096:error:04065072:rsa routines:RSA_EAY_PRIVATE_DECRYPT:padding check failed:rsa_eay.c:602:

最後にシェルスクリプトに組み込み

これで、シェルスクリプトに組み込みができました。

ファイルの配置は多少考えたほうが良いかもしれませんが、平文でパスワードをシェルの中に 記載するよりは、セキュアになったのではないでしょうか。

#!/bin/bash

USER_NAME="my_user_name"
PASSWORD=$(openssl rsautl -decrypt -inkey private-key.pem -in pass.rsa)

参照


[amazon_link asins=‘4797382228,B06XJ88H1G,4798148814,4274065731,4908686009’ template=‘ProductCarousel’ store=‘lunalab-22’ marketplace=‘JP’ link_id=‘6ed9f1a1-9c21-11e7-b073-e76e7734fb4d’]