kenju's blog

About Programming, Mathematics, Security and Blockchain

`~/.ssh/known_hosts` に追加するIP Addressをハッシュ化する

tl;dr

  • ~/.ssh/known_hosts のIP Addressをハッシュ化して管理する方法があることを知った
  • これは、どのキーに対してどのIP Addressが割り当てられているかが推測されにくくするため、らしい
  • known_hosts をvimとかで粛々と書き換えるのではなく、ssh-keygen -R/ssh-keyscan -H を使って管理する名が最近の手法…らしい?

生成方法

ssh-keyscan-H オプションを付与すると、ハッシュ化してくれる。

# remove from 'known_hosts' (with creating backup)
ssh-keygen -R github.com

# stdout hashed hostname and append to 'known_hosts'
ssh-keyscan -H github.com >> ~/.ssh/known_hosts

結果、以下のような感じになる。

|1|F1E1KeoE/eEWhi10WpGv4OdiO6Y=|3988QV0VE8wmZL7suNrYQLITLCg= ssh-rsa ... 

もしくは、HashKnownHosts でも設定可能。詳細は man ssh_config から。

Host *
    HashKnownHosts yes

なお、 FingerprintHash という設定値も存在し、ハッシュ化のアルゴリズムは変えられるらしいが、md5 or sha256 (default) とのこと。なのでdefaultを使っておけばいい。

背景

http://nms.lcs.mit.edu/projects/ssh/README.hashed-hosts

If host names and addresses are stored in plaintext, an adversary who obtains a user’s password will have access to the full list of hosts that the compromised user has ever previously contacted from the compromised host. By hashing the the host names and addresses, we prevent the adversary from reading them directly. (The adversary can still verify whether or not a given host name or address is in the known_host file.)