ファイルを暗号化してみる

共通鍵方式

暗号化につかうパスワード、複合化につかうパスワードがともに同じな方式
だからこちらでパスワードを掛けて、暗号化したファイルを送って、のちに別の送信方法でパスワードを送る。
これで相手側も暗号化したファイルを戻せる

使うコマンドはopenssl

  • 暗号化
    [caster@c ~]$ openssl enc -e -aes-256-cbc -salt -k <パスワード> -in <暗号対象> -out <暗号化したファイル>
     
    [caster@c ~]$ ls -lh ID006C01_00199.mrc
    -rw-r--r-- 1 caster domain users 33M  2月 14 00:58 ID006C01_00199.mrc
    [caster@c ~]$ time openssl enc -e -aes-256-cbc -salt -k RuleBreaker -in ID006C01_00199.mrc -out ID006C01_00199.mrc.enc
    real    0m0.305s
    user    0m0.059s
    sys     0m0.033s
     
    [caster@c ~]$
    [caster@c ~]$ ls -lh Jun25_15.51.52.tif
    -rw-r--r-- 1 caster domain users 436M 8月  8 01:10 Jun25_15.51.52.tif
    [caster@c ~]$
    [caster@c ~]$ time openssl enc -e -aes-256-cbc -salt -k RuleBreaker -in Jun25_15.51.52.tif -out Jun25_15.51.52.tif.enc
    real    0m1.166s
    user    0m0.839s
    sys     0m0.310s
     
    [caster@c tmp]$
    436MBのファイルの暗号化に0.1秒ほど必要みたい(3.5GHz CPU). ファイルサイズはさほど変化はありません
  • 複合化
    暗号化したファイを元に戻します
    [caster@c ~]$ openssl enc -d -aes-256-cbc -salt -k <パスワード> -in <暗号化したファイル> -out <戻したファイル名>
     
    [caster@c ~]$ time openssl enc -d -aes-256-cbc -salt -k RuleBreaker -in ID006C01_00199.mrc.enc -out ID006C01_00199.mrc.dec
    real    0m0.042s
    user    0m0.014s
    sys     0m0.028s
     
    [caster@c ~]$ diff ID006C01_00199.mrc.dec ID006C01_00199.mrc    <-- オリジナルと変化なし
    [caster@c ~]$ 
    [caster@c ~]$ time openssl enc -d -aes-256-cbc -salt -k RuleBreaker -in Jun25_15.51.52.tif.enc -out Jun25_15.51.52.tif.dec
     
    real    0m0.456s
    user    0m0.172s
    sys     0m0.284s
    [caster@c ~]$ diff Jun25_15.51.52.tif.dec Jun25_15.51.52.tif

他、共通鍵方式としてはwindowsで一般的な zip コマンドで圧縮する際にパスワードを埋め込む方法です
*gzipには解凍パスワード機能はないみたい
使い方は
「zip -e <圧縮+パスワード込みファイル> <入力ファイル>」
で、実行後に「パスワード」が問われます

[caster@c ~]$ gtar cf Micrographs.tar ./Micrographs/*.mrc
[caster@c ~]$ ls -lh Micrographs.tar
-rw-r--r-- 1 caster domain users 6.3G  8月  8 01:34 Micrographs.tar
[caster@c ~]$
[caster@c ~]$ 
[caster@c ~]$ zip -e Micrographs.tar.zip Micrographs.tar
Enter password:                     <--- パスワード入力
Verify password:                    <--- パスワード再入力
  adding: Micrographs.tar (deflated 35%)
 
[caster@c ~]$ 
[caster@c ~]$ ls -lh Micrographs.tar.zip
-rw-r--r-- 1 caster domain users 4.1G  8月  8 02:14 Micrographs.tar.zip
[caster@c ~]$

*マシンが非力ならGB単位のファイルの圧縮は避けたほうがいいかもしれません。圧縮に掛ける時間で転送が終わるかも..

公開鍵方式

いわゆる「秘密鍵」と「公開鍵」でファイルを暗号化、複合化、あるいは署名とか言った事を行う
ここでは再度 openssl を使ってファイルを暗号化/複合化しますが、その鍵には ssh-keygen で作られる

  • id_rsa
  • id_rsa.pub

を使ってみます。
gpgで鍵を作って、暗号化、復号化もありますが、、

利用シーンとしては、相手に送りたいファイルがある。これをownCloudとかクラウドストレージに配置するが、
取られても中身が見られないように暗号化する。っで、相手から「公開鍵」を送ってもらって、「公開鍵」で暗号化する
まずは送られてきた公開鍵をopensslで使うために変換する

[caster@c ~]$ ssh-keygen -f <ssh公開鍵> -e -m PKCS8  >   <ssh公開鍵.変換>
 
[caster@c ~]$ ssh-keygen -f id_rsa.pub -e -m PKCS8  >  id_rsa.pub.conv

変換した鍵を使って対象ファイルを暗号化します

[caster@c ~]$ openssl rsautl -encrypt -pubin -inkey id_rsa.pub.conv -in Micrographs.tar -out Micrographs.tar.enc

できた「Micrographs.tar.enc」を相手が取得可能な場所に置いてURLを伝える。

相手方は、「Micrographs.tar.enc」をダウンロードして、自身が保有する「秘密鍵」で復号させる

[assassin@c ~]$ openssl rsautl -decrypt -inkey id_rsa -in Micrographs.tar.enc -out Micrographs.tar

tarファイルを作りつつ暗号化

tarでめとめたファイルをパイプ(|)で繋いで、暗号を施して「-out」に出してます

[caster@c ~]$ gtar cf - ./junk | openssl enc -e -aes256 -out junk.tar.enc -k RuleBreaker

暗号化しただけでは中途半端で、復号化は下記のように行う。単にopensslで複合化した標準出力をパイプ(|)でtarに繋げているだけ

[caster@c ~]$ openssl enc -d -aes256 -salt -k RuleBreaker -in junk.tar.enc | gtar xf -

トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2017-08-17 (木) 07:33:26 (2044d)