オレオレ証明書の署名付きで暗号化して送る
こんなことをしてみた、の記録。
目的
ファイルを暗号化して送りたい。ただし以下の条件で。
条件
- パスワードは人が覚えられる程度にしたい(4文字くらい)
- 暗号化されたファイルはそれなりに暗号強度を保ちたい
- 複合化した内容が正しいか検証したい(送り先にオレオレ証明書があるとして)
- 圧縮は事前に済ませておく
です。環境はMac。
いえ、Macでなくてもいいんですけど、手元がMacなので。
方針
そこで、こんなことを考えました。
- 対象ファイルは一つとしよう。 複数ある場合は、事前にzip化しておけばいいし。
ここでは、適当に10MBのファイルを用意します。
dd if=/dev/random of=./rnd.bin bs=1024 count=10240
rnd.binができました。
パスワードの生成
パスワードは英小文字4文字にしよう。それ以上は覚えられない。
# pwgenが入っていなければいれます
brew install pwgen
pwgen -A0 4 1 > pass.key
パスワードが英小文字4文字程度ではBruteforceされてしまうので、sha256で1000回ストレッチします。
スクリプトでもよいのですが、1000回ストレッチするとちょっと遅かったので、Cでやっつけでこさえます。
ソースはこちら。
これで、
./sha 1000
とすることで、1000回のストレッチが可能です。パスワードファイル名(pass.key)と暗号鍵ファイル名(cek.key)は決め打ちです。
暗号化
送り先で検証できるように署名をつけよう。
# 秘密鍵を用意します
openssl genrsa 1024 > private-key.pem
# ダイジェストを取得します
openssl dgst -sha256 -sign private-key.pem rnd.bin > rnd.bin.sig
これで、手元にはrnd.bin と rnd.bin.sigの2つのファイルがあります。
ひとまとめにしよう
なんのひねりもなく、安直にtarします。
tar cvf rnd.bin.tar rnd.bin rnd.bin.sig
これで、対象ファイルはrnd.bin.tar一つだけになりました。
役者がそろったので、暗号化します
openssl aes-256-cbc -e -in rnd.bin.tar -out rnd.bin.encrypted -pass file:./cek.key
これで、相手に渡す暗号化ファイル( rnd.bin.encrypted )ができました。
オレオレ証明書の作成
一緒に渡すオレオレ証明書も作ります。有効期限は3日間です。
openssl req -new -x509 -out oreore.crt -key private-key.pem -days 3
できた oreore.crtを相手に渡して信頼してもらえれば完璧です。
相手に渡すもの
以下の3つです。
- rnd.bin.encrypted (暗号化された実体)
- oreore.crt (オレオレ証明書。できれば別経路で事前に渡しておきたいところ)
- パスワード(英小文字4文字。別手段で。電話とか)
複合化
では、受け取った方の処理です。
パスワードの生成
pass.keyファイルに受け取った英小文字4文字のパスワードを書いて保存します。
暗号化の時と同様に、1000回のストレッチをかけると、暗号化時と同じcek.keyが出来上がります。
./sha 1000
複合化
openssl aes-256-cbc -d -in rnd.bin.encrypted -out rnd.bin.tar -pass file:./cek.key
これで、rnd.bin.tar が出来上がります。
ばらす
tar xvf rnd.bin.tar
これで、rnd.bin と rnd.bin.sig がでてきます。
検証する
最後に、でてきたrnd.binが本当に正しいものかを検証します。
# 公開鍵証明書から公開鍵を取り出します
openssl x509 -in oreore.crt -pubkey -noout > public-key.pem
# 署名検証を行います
openssl dgst -sha256 -verify public-key.pem -signature rnd.bin.sig rnd.bin
Verified OK
とでれば、無事検証されたということです。
Verification Failure
であれば、改ざんされた可能性があります。
めでたし。めでたし。
参考
証明書まわり、大変参考になりました。おもしろい。
おわりに
なりすましには対処できません。そこは許容ということで。
また、実際には各OSごとに証明書を扱う作法があると思いますが、そこは置いておきます。
おわり。
Author And Source
この問題について(オレオレ証明書の署名付きで暗号化して送る), 我々は、より多くの情報をここで見つけました https://qiita.com/urakarin/items/0b946fe2cbcae34ee683著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .