それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ruby で文字列を「暗号文・平文」変換すりゃよかった。

パスワードをファイルに直接書いちゃだめ

パスワードをファイルに書いちゃダメ、といわれてもそうも行かないよねぇ。

ファイルシステムのバージョンニング

ファイルシステムにジャーナル機能があって自動バックアップだったりするので、OSXのバックアップをLinuxに取得してたら丸見えだったりするじゃん。それはいざという時に時間コスト削減でいいんだけど、ファイルが見えちゃうのは嫌。

うっかりgithub に投げちゃった問題

平文でパスワード書いたファイルをうっかりgit commit して、いつもの流れで git push してた、慣れって怖い。

ウッカリ、git push しても補足されない方法が必要だった。

ruby の opensslを利用して変換。

ということで、暗号化・復号化で暗号文と平文に変換する。

Ruby スクリプトでデータを暗号化する方法 - WebOS Goodies を参考に。ファイルを処理してみた。

      def encrypt_data(data,pass)
            cipher = OpenSSL::Cipher::Cipher.new("AES-256-CBC")
            salt = OpenSSL::Random.random_bytes(8)
            cipher.encrypt
            cipher.pkcs5_keyivgen(pass, salt)
            data = cipher.update(data) + cipher.final
            ## salted
            data = "Salted__" + salt + data
        end
        def decrypt_data(data,pass)
            data = data.force_encoding("ASCII-8BIT")
            salt = data[8,8]
            data = data[16, data.size]
            cipher = OpenSSL::Cipher::Cipher.new("AES-256-CBC")
            cipher.decrypt
            cipher.pkcs5_keyivgen(pass, salt)
            cipher.update(data) +cipher.final

暗号化のキーはなにしたらいいの?

なんでもいいんだけど、手元の端末にいつもあるファイルをキーに暗号したら楽だよ。

つまり、id_rsa だとか、ログインアカウントの写真とかですね。

ファイルではくパスフレーズ(String)を使うなら

文字列をOSX Keychains に入れておけば、紛失することないでしょうね。

Chrome なんかはOSX Keychains にマスター鍵入れてますね。

パスワードを保存する奴。作った

つまり、マスターキー( ~/.ssh/id_rsa )で平文パスワードファイルを暗号化して保存しておくってことですね。

gistfb6b3eeac72121c49d76

むかしはpit とか使えばよかった

pit でも良いんだけど、pit だと編集面倒くさいから CSV/TSV で一行に書きたかった。

pit は暗号化されないし、作っても手間じゃないしね。

ここで ruby 1.9 から注意

Stringのinternal encoding があります。ホントruby の何処が嫌いってここが嫌い。文字列エンコーディングなんて出力時でいいじゃんと思うわ・・・

ファイルからStringに読み込んだデータなどを扱うので、 8-octet つまり 8BIT にしておく。

            data = data.force_encoding("ASCII-8BIT")

まぁもっともSaltを一緒に保存しなければいいだろ言われりゃそうなんですけど。

参考資料

本の虫: GNU/Linuxでお手軽に使えるCLIのファイル暗号化ツール

http://jemsec.blog.so-net.ne.jp/2013-02-10

http://qiita.com/ikuwow/items/1cdb057352c06fd3d727