About Programming, Mathematics and Security

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


  • ~/.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

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


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

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

Host *
    HashKnownHosts yes

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


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.)