GitHub 上の公開鍵を使ってファイルの暗号化と署名確認、ローカルの秘密鍵で復号や署名をするシェル・スクリプトです。(POSIX 準拠。bash zsh bourne shell などで動作します)
- 動作 OS
- Linux
- macOS
- Windows 10 + WSL2
- 必須コマンド
Note: @yoshi389111 さんによる、Go 言語版 git-caesar もオススメ。
QiiCipher で使えるコマンドは以下の通りです。
| 機能 | コマンド | 使用例 |
|---|---|---|
| 鍵生成(Key Generate) | keygen |
$ ./keygen [email protected] MyKeyName |
| 暗号化(Encrypt) | enc |
$ ./enc KEINOS himitsu.txt |
| アーカイブ&暗号化(Archive) | archive |
WIP |
| 復号(Decrypt) | dec |
$ ./dec ~/.ssh/id_rsa himitsu.txt.enc himitsu.txt |
| 復号&解凍(DeArchive) | dearchive |
WIP |
| 動作確認(Check) | check |
$ ./check KEINOS ~/.ssh/id_rsa |
| 電子署名(Sign) | sign |
$ ./sign KEINOS ~/.ssh/id_rsa himitsu.txt |
| 署名の確認(Verify) | verify |
$ ./verify himitsu.txt KEINOS himitsu.txt.sig |
| 鍵長の確認(Check Key Length) | checkkeylength |
$ ./checkkeylength KEINOS |
- リポジトリを
cloneするか、./binディレクトリにあるスクリプトをパスの通ったディレクトリに設置してください。- 設置する際にコマンドに実行権限を与えるのを忘れないでください。(例:
chmod 0755 ./enc)
- 設置する際にコマンドに実行権限を与えるのを忘れないでください。(例:
- いずれのスクリプトも引数がない場合はヘルプが表示されます。(例:
$ ./encでヘルプ表示)
このシェル・スクリプトは RSA鍵のキーペアを生成します。鍵長は安全のため4096bitに設定されています。 キーペアは ~/.ssh/ に保存されます。
$ ./keygen <email> <key name><email>:Githubで使用しているメールアドレス(公開鍵内に埋め込まれます)<key name>:希望するキーペアの名前(パス名ではない)
このシェル・スクリプトは GitHub 上の公開鍵一覧(https://github.com/<gihub user>.keys)から一番最初の公開鍵を使い暗号化ファイルを作成します。
$ ./enc <github user> <input file> [<output file>]<github user>:相手の GitHub アカウント名。(@KEINOS@GitHubの場合はKEINOS)<input file>:暗号化したいファイルのパス。
<output file>:暗号化されたファイルの保存先のパス。指定されていない場合は、同階層に<input file>.encと.enc拡張子を追加して暗号化済みファイルが作成されます。
このシェル・スクリプトはローカルの秘密鍵を使い暗号ファイルを復号します。
$ ./dec <private key> <input file> <output file><private key>:復号に使われる秘密鍵のパス。GitHub 上の公開鍵とペアである必要があります。(例:~/.ssh/id_rsa)<input file>:暗号化されたファイルのパス。<output file>:復号された/平文化されたファイルの出力先のパス。
このシェル・スクリプトはカレント・ディレクトリにダミー・ファイルを作成し「暗号化」、「復号」および「比較」のチェックを行います。
$ ./check <github user> <private key><github user>:自分の GitHub アカウント名。(@KEINOS@GitHubの場合はKEINOS)<private key>:復号に使われる秘密鍵のパス。GitHub 上の公開鍵とペアである必要があります。- [注意]:暗号化で使われる公開鍵は指定ユーザの公開鍵一覧(
https://github.com/<github user>.keys)で表示される一番上の公開鍵が使われます。
このシェル・スクリプトは、自分の秘密鍵を使ってファイルの署名を作成します。
$ ./sign <github user> <private key> <input file> [<output file>]<github user>:自分の GitHub アカウント名。(@KEINOS@GitHubの場合はKEINOS)<private key>:秘密鍵のパス。署名に使われます。GitHub の公開鍵とペアの秘密鍵である必要があります。<input file>:署名したいファイルのパス。
<output file>:署名されたファイルの保存先パス。指定されていない場合は、同階層に<input file>.sig(.sig拡張子を追加した署名ファイル)が作成されます。
このシェル・スクリプトは、ファイルが正しく署名されたものか検証します。
$ ./verify <verify file> <github user> [<sign file>]<verify file>:署名を確認したいファイルのパス<github user>:署名者の GitHub アカウント名
<sign file>:署名されたファイルのパス。指定されていない場合は、同階層にある<verify file>.sig(.sig拡張子を追加したファイル)が使用されます。
このシェル・スクリプトは、RSA鍵の鍵長を表示します。 また、1024bit以下の短い鍵長に対する危険性について注意喚起し、推奨される対応についても表示します。
$ ./checkkeylength <github user><github user>:鍵長確認の対象 GitHub アカウント名
- これらのスクリプトは 1 ブロックぶんの暗号化しか行わないため軽量のファイル向けです。パスワードやハッシュ値といった軽量ファイル向けです。
- 各スクリプトはダウンロード後、(0755などの)実行権限が必要です。
- 使用する秘密鍵は OpenSSH 形式ではなく PEM 形式である必要があります。参考 OpenSSH 形式の秘密鍵について
-
macOS HighSierra
OSX 10.13.5(2018/07/13)$ openssl version:LibreSSL 2.2.7$ ssh -V:OpenSSH_7.6p1, LibreSSL 2.6.2$ bash --version:GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
-
Linux Ubuntu
Ubuntu 20.04.2 LTS(2021/05/28)$ openssl version:OpenSSL 1.1.1f 31 Mar 2020$ ssh -V:OpenSSH_8.2p1 Ubuntu-4ubuntu0.2, OpenSSL 1.1.1f 31 Mar 2020$ bash --version:GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu)
このスクリプトは Qiita/Qiitadon の同人サークル「Qithub-ORG」によってメンテナンスされています。
不具合報告、改善提案、PR 方法やルールなどは CONTRIBUTING.md をご覧ください。
