LoginSignup
0
0

More than 5 years have passed since last update.

オレオレ証明書の署名付きで暗号化して送る

Last updated at Posted at 2016-02-04

こんなことをしてみた、の記録。

目的

ファイルを暗号化して送りたい。ただし以下の条件で。

条件

  • パスワードは人が覚えられる程度にしたい(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ごとに証明書を扱う作法があると思いますが、そこは置いておきます。

おわり。

0
0
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
0
0