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]から始まる模様)をちゃんと確認する癖をつけるのが良いかもしれませんね。

2014年10月12日日曜日

C言語で理解する英語の冠詞(aとtheの使い分け)

英語の冠詞は、実はプログラマーにはとてもわかりやすいんです。

変数宣言はa, 参照はthe

int i;

i = 100;

1行目のint iは宣言なので「a」です。"Declare an integer variable."

次の i = 100 はその変数を参照しているので「the」です。 "Assign 100 to the integer variable."

仮引数と戻り値はa

int func(int v)
{
    return v * 2;
}

関数の仮引数と戻り値は「a」です。"This function takes an integer argument and returns an integer value."

もちろん、その引数を関数内で使う場合は「the」になります。"Double the first argument and return the result."

まとめ

特定の変数についてだけ会話するときは「the」ですが、それ以外は「a」です。日常会話もそんな感じです。

2014年9月30日火曜日

Linux Kernel Updates 2014.08のKindle版を出しました

コミケ86で出版したLinux Kernel Updates 2014.08Kindle版を出版しました。

目次

  • What's New in Linux 3.13?
  • What's New in Linux 3.14?
  • What's New in Linux 3.15?
  • Dockerとカーネル
  • ファイル名の入れ替え
  • O_TMPFILEの紹介

Linux Kernel Updates 2014.08の購入はこちらから!

以下は冊子版のプレビューです(Kindle版とはレイアウトが異なります)。

Linux Kernel Updates 2014.08の購入はこちらから!

2014年9月21日日曜日

RubyKaigi 2014で、多様性の話とRails Girlsの紹介をしました

RubyKaigi 2014に3日間参加し、2日目に"Rails Girls: Not Only for Girls"というタイトルで、発表してきました。

Tech companyと呼ばれるUSの会社でも、女性技術者の割合は2割程度にとどまっていて、各社技術者の確保に苦労しているようです。日本での私の経験では、分野にもよりますがおおむね1割程度で、USよりもさらに女性技術者が少ないと感じています。

プレゼン中でも触れた次の動画に象徴されるように、文化的・社会的な要素と深く結びついていて、一朝一夕に変わるものではありません。もちろん車輪の両輪として、公平な採用、職場での性差別をなくすということは進めていく必要があります。

そんな中、長期的な目線で状況を改善していこうと、いくつもの活動が立ち上がっています。Rails Girls もその一つです。

Rails Girls だけでなく、世界中でいろんな人が様々な活動に取り組んでいます。 GoogleのWomen Techmakersというページに様々なコミュニティ活動へのリンクがあります。また、学会でもACM-WIEEE Women in Engineeringなどに代表されるような活動があります。ぜひ身近な活動に参加してみてください。

非常に難しい問題ではありますが、一歩ずつ良くなっていくことを願っています。

PS: RubyKaigi 2014では私の知る限り、昨年のような問題もなく、非常に良かったと思いました。関係者の皆様はじめ、参加者すべての方の尽力に感謝します。

2014年8月26日火曜日

無線LANを暗号化すればのぞき見されないという誤解

今日のニュースに次のようなものがありました。

無線LANのメール丸見え 成田、関西、神戸の3空港

成田、関西、神戸の3空港が提供する無料の公衆無線LANサービスでインターネットを利用した場合、送信したメールの宛先や中身、閲覧中のウェブサイトのURLを他人がのぞき見できる状態になることが26日、神戸大大学院の森井昌克教授(情報通信工学)の実地調査で確認された。

無線LANを暗号化すればのぞき見を防止できるが、パスワードの入力などが必要となり、3空港は利便性を考慮し暗号化していないという。

無線LANのメール丸見え 成田、関西、神戸の3空港 - 47NEWS(よんななニュース)より引用

「無線LANを暗号化すればのぞき見を防止できる」というのは、誤解です。

無線LANの暗号化方式には複数あり、WEP, TKIP, CCMP(AES)の3種類が使われています。これらは暗号化の方式を定めただけで、鍵交換(パスフレーズの認証)は別の規格です。それぞれ WEP, WPA2-Personal(PSK), WPA2-Enterprise の3種類です。WEPだけは暗号化方式、鍵交換の両方を定めていて、WPA2は暗号化と鍵交換の方式を組み合わせて使うことができます。

WEPWPA2-Personal(PSK)WPA2-Enterprise
WEP危険--
TKIP-危険危険
CCMP(AES)-事前共有鍵を持っている人は、他人の通信内容を見れる一人一人認証鍵が違うので、他人の通信を見れない

まず、WEP、WPA、TKIPを使うWPA2は危険なので使わないようにしましょう。これらには脆弱性が見つかっています。使っていいのはWPA2-CCMP(AES)の組み合わせのみです。表には掲載していませんが、WPAもWPA2と同様に組み合わせを選ぶことができますが、WPA2に置き換わっているので使わないようにしましょう。

家庭や無線LANのホットスポットで利用されるのは WPA2-Personal と言われるタイプで、事前にPSK(Pre-shared key, 事前共有鍵)を決めてパスワードにします。これはこの事前共有鍵を知らない人には内容は読まれないのですが、鍵を持っている人には内容が見えます。つまり、不特定多数で同じパスワード(PSK)を使い回すような環境では、WPA2-Personalで保護されていたとしても、パスワード(PSK)を知っている人には内容が見えてしまいます。

WPA2-Personalでは、接続時にPSKを元に暗号化に使うセッション鍵を決定します。このセッション鍵は無線LANの端末ごとに割り当てられ、お互いに知ることはできません。ところが、PSKと、接続時の鍵交換の情報があればセッション鍵が計算されてしまいます。鍵交換は平文で行われます。そして、無線LANでは「切断する」というパケットは暗号化されないので、第三者が他人になりすまして「切断する」というパケットを送れてしまいます。端末は切断されたことを知ると再接続しようとしますが、そのときには鍵交換の内容を盗み見られるので、セッション鍵を入手され、その後の通信は盗み放題となってしまいます。

ということで、無線LANの暗号化は「パスワードを知らない人からは守られるけど、パスワードを知っている人には他人であっても通信内容が見えている」というものです。

WPA2-Enterpriseでは、一人一人に違う鍵(パスワードや証明書)を割り当てるので、このような問題は起こりません。

追記: WPA2-Personalは、家庭内のように全員が信頼できる環境で安全な無線LANを構築するには十分なもので、有線LANに近い水準のセキュリティが実現できます。不特定多数がPSKを知っている環境では意味が無いよ、ということです。

2014年8月8日金曜日

Linux Kernel Updates 2014.08をコミケ86に出します!

コミケ86に「Linux Kernel Updates 2014.08」を出展します!

8月17日(日) 西“き”-10b 「低級はっかーズ

目次

  • What's New in Linux 3.13?
  • What's New in Linux 3.14?
  • What's New in Linux 3.15?
  • Dockerとカーネル
  • ファイル名の入れ替え
  • O_TMPFILEの紹介

表紙は毎度おなじみきのとなおとさんに描いていただきました。ありがとうございます。

価格は300円、32ページです。

立ち読み

今回はDocker特集です!

既刊

過去のコミケで出したLinux Kernel Updatesのバックナンバーも持って行きます。在庫限り。

会場でお待ちしています!

2014年8月1日金曜日

Fedora 20でI218Vを認識させる方法

Asus Z97M-Plusのような新しめのAsusマザーボードには、イーサネットコントローラーとしてIntel I218Vが搭載されています。ところがFedora 20のインストールディスクにはこのデバイスドライバは入っていません。インストール方法を記録しておきます。

私は違う環境のFedora 20でビルドしてUSBで運びました。仮想マシンを使うのが楽だと思います。

必要パッケージなど

  • kernel-devel-3.11.10-301.fc20.x86_64 (バージョンも揃えます)
  • "Development Tools" 一式
  • I218V用の新しいドライバ e1000e-x.y.z.w.tar.gz っていうファイル名

ビルド手順

ダウンロードしたe1000eの圧縮ファイルを展開します。私の場合は e1000e-3.1.0.2.tar.gz でしたので tar xf e1000e-3.1.0.2.tar.gz します。

"cd e1000e-3.1.0.2/src; make BUILD_KERNEL=3.11.10-301.fc20.x86_64" します。すると、同じディレクトリにe1000e.koが生成されます。

e1000e.koを何とかして対象のマシンに移動し、"cp e1000e.ko /lib/modules/`uname -r`" して、対象のディレクトリに入れます。

おもむろに "depmod; modprobe e1000e" します。 "ip a" してインタフェースが見えれば成功です。

カーネル更新後

この記事を書いている2014年8月1日現在で手に入る最新カーネルの3.15.6-200.fc20ではI218Vに対応していますので、yum upgradeした後は特に対応不要です。