ラベル BSD の投稿を表示しています。 すべての投稿を表示
ラベル BSD の投稿を表示しています。 すべての投稿を表示

2014年11月25日火曜日

ssh-keygenがデフォルトで生成する鍵の種類と、安全性

sshの鍵を生成するのにssh-keygenをよく使いますが、無意識的に ssh-keygen -t rsa -b 2048 などと指定していました。ところが最近のバージョンのssh-keygenはオプションなしでもとりあえず動きます。

yuryu@ubuntu:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/yuryu/.ssh/id_rsa): 
Created directory '/home/yuryu/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/yuryu/.ssh/id_rsa.
Your public key has been saved in /home/yuryu/.ssh/id_rsa.pub.
The key fingerprint is:
7f:5a:1d:54:6a:30:dd:5c:ab:0c:8b:c6:9c:d6:3c:b8 yuryu@ubuntu
The key's randomart image is:
+--[ RSA 2048]----+
|            o. o+|
|             o.o+|
|           .  +. |
|        o * +o.  |
|        SO = o.  |
|        o.. .. . |
|         E. o .  |
|           +     |
|          .      |
+-----------------+

よく見ると答えが書いてありますが、デフォルトではどんな種類の鍵を生成しているのでしょうか?

[ RSA 2048]と書いてありますね。 RSAの2048bitsです。この種類の鍵と長さは今のところ安全だと言われているので、普通に使うのであればssh-keygenとオプション無しに実行すれば良いわけです。 DSAは鍵の長さが1024bitsでしか使えず、もはや安全な長さだとは言えないので使うべきではありません。なおECDSAの方が安全で鍵が長くなった場合に破綻しづらいと言われていますが、サポートされたのが比較的最近で例えばOS Xでは動かなかったりするので、まだ広く使えるとは言いがたいようです。

昔の記憶をたどると、-t を指定しない場合にはエラーだったり、標準の鍵長が1024bitsだったりしたことがあったと思うのですが、いつから変わったのでしょうか。コミットログを追ってみました。

年月変更点デフォルトで生成される鍵
1999年9月最初のコミットrsa1 1024
2000年4月DSAをサポートrsa1 1024
2000年11月RSA(SSH2)がサポートrsa1 1024
2001年12月鍵の種類の指定が必須にN/A
2005年6月デフォルトの鍵長が2048bitsに(ただし種類の指定は必須)N/A
2005年12月デフォルトの鍵がRSAにrsa 2048

というわけで、2001年よりも前のシステムはそもそも脆弱なので省くとすると、鍵の指定をしなくても動くシステムでは標準で RSA 2048bits の鍵が生成されるようです。鍵の指定をしなくてはいけない(-tオプションを省くとエラーになる)システムでは鍵長も指定した方が安全でしょう。

将来ECDSAが広く使われるようになったらまた状況が変わるのかも知れませんが、randomart image([ RSA 2048]から始まる模様)をちゃんと確認する癖をつけるのが良いかもしれませんね。

2013年9月4日水曜日

tar は圧縮形式を指定しなくても展開できる

tar は最もよく使われるコマンドの一つですが、意外と知られていないことがあります。それは、展開するときに圧縮形式を指定しなくても展開できるということです。

よくtarを使ってファイルを展開するときに紹介されるコマンドは

tar xzvf archive.tar.gz
tar xjvf archive.tar.bz2
tar xJvf archive.tar.xz

というふうに、圧縮形式を指定しているものだと思います。ところが広く使われている GNU tar (Linux)も、BSD tar (OSX)も、展開するときは圧縮形式を自動判別します。つまり、

tar xvf archive.tar.gz
tar xvf archive.tar.bz2
tar xvf archive.tar.xz

とするだけで、すべての形式を自動判別して展開します。ちなみにファイルの一覧を出力してほしくない時は

tar xf archive.tar.gz
tar xf archive.tar.bz2
tar xf archive.tar.xz

とすると画面上には何も出力せず展開してくれます。

このことは、GNU tar であれば公式マニュアルBSD tar であればmanにかかれています。

GNU tar の場合
Reading compressed archive is even simpler: you don't need to specify any additional options as GNU tar recognizes its format automatically.
圧縮されたアーカイブを読むのはより簡単です。GNU tar が自動的に形式を認識するので、追加のオプションを指定する必要はありません。

BSD tar の場合
代表例として -z を抜粋しますが、他の形式のオプションのところにも同様のことが書かれています。
-z, --gunzip, --gzip
(c mode only) Compress the resulting archive with gzip(1). In extract or list modes, this option is ignored. Note that, unlike other tar implementations, this implementation recognizes gzip compression automatically when reading archives.
-z
 (cモードのみ) 生成されるアーカイブをgzip(1)で圧縮します。展開やリストモードでは、このオプションは無視されます。他のtarの実装と異なり、この実装ではアーカイブを読むときにgzip圧縮を自動的に認識します。

いかがでしょうか。特にBSD tarの場合は明確に「無視する」と書いています。

ちょっとしたトリビアですが、知ってるとだいぶ得した気分になれます。