wiki:SourceCode

公開ソースコード

恥ずかしいので「オープンソース」だなんて申しません。 当社製のソースコードをこちらで公開します。 ここで説明していない物を含めた全ソースコードは、ページ上の方の「レポジトリブラウザ」かこのリンクからどうぞ。

Django用HTTP認証ミドルウェア

HTTP認証を行うための、Djangoミドルウェアです。

  • HTTPサーバの機能で認証(基本認証など)した結果を信じてDjangoに反映させるミドルウェア。
  • Django上で基本認証を行うためのミドルウェアとデコレータ。

ソースはこちらにあります。

SRP

 スタンフォードの人が研究している、安全なパスワード認証&鍵交換の仕組み。  RFC 2945としてStandard Trackに乗ってます。 SRPは、Secure Password Protocolの略です。 プロトコルと言っても、ネットワーク上のパケット云々の話ではなくて、どのような情報を交換するのかということを規定しています。 実際のアプリケーションにおいては、通信路を用意し、その通信路の上でのデータ交換手段を用意する必要があります。 この部分についてはSRPそのものでは規定していません。  TelnetはRFC 2941として規定されています。  TLSはRFC 5054です。

「安全な」というのが何を示すのでしょうか。 SRPでは、当然ながら生のパスワードをネットワークに流すことはありません。 リプレイアタックもできません。 加えて、生のパスワードをサーバ上に置いておく必要もありません。 前者だけだったら、たとえばCHAPという方式がありました。でも、サーバ上には生のパスワードが必要でした。 さらに、クライアントとサーバが相互に認証することができます。 過去の認証方式は、サーバから見てクライアントを信用できるかどうかを判断するだけでした。 これでは、クライアントから見たときに、サーバと思って通信している相手が本当に正しい相手なのかがわかりません。 SRPでは、クライアントから見ても、サーバが同じパスワードを知っているか(生のパスワードは置いて無いですが)を検証することができます。

ひとつだけマイナス点は、サーバに置いてあるデータを盗んでしまえば総当たり攻撃ができてしまうということです。 そりゃ、仕方ない気がします。そうじゃなきゃ、本来の認証さえできないでしょう(今後何か技術革新があるでしょうか)。 ただし、総当たり攻撃のために必要な計算がちょっと重いので、現実的には総当たり攻撃は大変でしょうね。

例によって…、Pythonで実装してみました。 Pythonでの実装としては、 Dr. Tomという人が実装したものが存在するのですが、これは少し古いプロトコルに基づいています。 また、 TLS Liteは最新のプロトコルに基づいてTLSを実装していますが、認証と鍵交換だけを取り出して使うには使いづらいです。 当社では、最新のSRP-6aというプロトコルに基づいて認証と鍵交換だけを行うモジュールを開発しました。 通信路については実装してありません。実際の用途においては、通信路とデータ交換手段とを実装する必要があるでしょう。

Camellia暗号Python版

 NTTと三菱電機が開発したCamellia暗号がオープンソースになったので、Pythonに移植してみました。Pure Python版と、C版を呼び出す拡張モジュール版とがあります。

Camellia暗号Python版はこちら

文字端末の共有

TTY端末っていうか、さすがにシリアル接続ではなくて、SSHとかです。文字端末って言った方が通りがいいのかな?いまどき、文字端末で開発するっていうのは少数派なのでしょうか。個人的にはどうもIDEには慣れません。それはさておき、文字端末を2名で共有するツールを作りました。いや、2箇所の文字端末で1つのシェルを共有するっていうのかな。つまり…、ひとりが立ち上げたシェルやエディタやらを、もうひとりが別の場所から見ながら勝手に操作することもできるってことです。ペアプログラミングで、他人のキーボードは触りたくないって人、キーボード配列が他人と違うひと、自分のデスクトップが恥ずかしくて見せられないって人には便利かもしれません。

文字端末の共有ツールはこちら

コードフラグメント