Skip to content

Commit

Permalink
Squash merge PR #27 feat: add checkkeylength command
Browse files Browse the repository at this point in the history
* Add checkkeylength command
* Add links of checkkeylength's code to README.md
* Fix the md5s function for Mac
  - See #25
* Add the 'checkkeylength' script
  • Loading branch information
Yuki Shimada authored Jun 1, 2021
1 parent 8d18dec commit 1da7e3b
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 1 deletion.
2 changes: 1 addition & 1 deletion .github/run-lint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ SUCCESS=0
FAILURE=1

# 拡張子のないスクリプトファイル一覧(テスト対象リスト)
LIST_SCRIPT_NO_EXT="archive check dec enc keygen sign verify"
LIST_SCRIPT_NO_EXT="archive check dec enc keygen sign verify checkkeylength"

echo '-------------------------------------------------------------------------------'
echo ' Requirement Check'
Expand Down
22 changes: 22 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ QiiCipher で使えるコマンドは以下の通りです。
|動作確認(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`|

## Usage

Expand Down Expand Up @@ -169,6 +170,27 @@ $ ./verify <verify file> <github user> [<sign file>]

---

### 鍵長の検証スクリプト

このシェル・スクリプトは、RSA鍵の鍵長を表示します。
また、1024bit以下の短い鍵長に対する危険性について注意喚起し、推奨される対応についても表示します。

#### 構文

```shellsession
$ ./checkkeylength <github user>
```

- `<github user>`:鍵長確認の対象 GitHub アカウント名

#### ソース

- [`checkkeylength.sh` のソースを見る](https://github.com/Qithub-BOT/QiiCipher/blob/master/bin/checkkeylength)
- [`checkkeylength.sh` のダウンロード](https://qithub-bot.github.io/QiiCipher/bin/checkkeylength)
- [チェックサム (SHA512)](https://github.com/Qithub-BOT/QiiCipher/blob/master/bin/checksum.sha512)

---

## 注意

- これらのスクリプトは [1 ブロックぶんの暗号化](https://qiita.com/kunichiko/items/3c0b1a2915e9dacbd4c1)しか行わないため**軽量のファイル向け**です。パスワードやハッシュ値といった軽量ファイル向けです。
Expand Down
75 changes: 75 additions & 0 deletions bin/checkkeylength
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#!/usr/bin/env bash

# SSHキー(RSA)の鍵長をチェックします。
# ======================================
#
# GitHub 上で公開されている(https://github.com/<user name>.keys で取得できる)
# 相手の RSA 公開鍵の鍵長を調べます。
# 2021年現在、1024bit以下の鍵長は安全性に懸念が生じています。
# 最低でも2048bit、できれば4096bit以上を推奨します。
#
# - 使い方の例:
# $ ./checkkeylength.sh KEINOS
#
# - 注意:利用前にスクリプトに実行権限を与えるのを忘れないでください。
#

# ヘルプ表示
# ----------
if [[ $# -lt 1 ]]; then
echo
echo "使い方: $0 <github user>"
echo
echo "- <github user> : 相手の GitHub アカウント名"
echo
exit 1
fi

md5s() {
if [ -e "$(which md5sum)" ]; then
echo "$1" | md5sum | awk '{ print $1 }'
elif [ -e "$(which md5)" ]; then
md5 -q -s "$1"
fi
}

# コマンド引数取得
# ----------------
USERNAME=$1

# trap の設定
# -----------
# スクリプト終了後一時ファイルを削除します。
# - 参考URL : https://qiita.com/m-yamashita/items/889c116b92dc0bf4ea7d
trap 'rm -rf /tmp/${USERNAME}.*' 0

# 一時ファイル
# ------------
TMP=$(md5s $RANDOM)
PATHPUBKEY="/tmp/${USERNAME}.${TMP}.pub"

# RSA 公開鍵の取得
# ----------------
# ユーザの GitHub の公開鍵一覧の1行目を取得
# - 取得先は: https://github.com/<user name>.keys
# - 参考URL : https://qiita.com/m0r1/items/af16c41475d493ab6774
echo -n "${USERNAME} の GitHub 上の公開鍵を取得中 ... "

if ! curl -s "https://github.com/${USERNAME}.keys" | head -n 1 >"$PATHPUBKEY"; then
echo "NG:公開鍵を取得・保存できませんでした。"
exit 1
fi
echo "OK"

# RSA公開鍵の鍵長を表示
# ------------------------
# - 参考URL :
# - https://qiita.com/ledmonster/items/b57d48981ad7a9d41042

echo "以下に${USERNAME}の鍵長情報を表示します。"
echo
ssh-keygen -l -f "$PATHPUBKEY"
echo

echo "上記の鍵長を確認してください。RSAキーでは行頭の数字(鍵長)が1024以下のものは危険です。"
echo "2048bit以上(できれば4096bit以上)のRSAキーへの作り直しを推奨します。keygenコマンドをご利用ください。"

0 comments on commit 1da7e3b

Please sign in to comment.