Greasemonkey でセキュアな RSS Syndication を実現する Remix

What we're talking about is giving Bloglines a quick upgrade and doing it ourselves. That means we're talking Greasemonkey, a Firefox extension that allows you to write scripts that modify the pages you visit. In this case, the modification is going to be decryption. We'll write a Greasemonkey script, securesyndication.user.js that looks for encrypted content and, using the private key we provide, will decrypt the content when we view it.

XML.com で、RSS をセキュアに配信する Hack のエントリーが挙がっていました。(これも宮川さんの del.icio.us から。彼のブックマークは非常に重要な情報源だったりする。)

RSS の description 内で、暗号化したい箇所を一部だけ Blowfish アルゴリズム (秘密鍵を使った可逆なアルゴリズム) で暗号化し、Bloglines などのウェブ型のリーダーに食わせて、表示時に鍵を埋め込んだ Greasemonkey で decrypt してやるというもの。なるほどこの手がありますか。

このエントリーでは、単に Greasemonkey を使ってプライベートな情報をセキュアに syndicate することに成功したよ、という以外にもいろいろ重要な点について言及されていると思います。

一つは、パスワード制限をかけただけの RSS sydication は脆弱であるという話。これは以前に hail2u.net で kyo さんが論じていた話で、ご存知のかたも多いはず。暗号化されていないパスワードがネット上を流れる、というだけでなく aggregator 側にパスワードを知られてしまうとか、フィード内にクレジットカード番号とかが入ってたらそれもネットに流れるし aggregator の DB に格納されてしまうとか色々。

もう一つは、XML Encryption Syntax & Processing という方法により Atom フィードではエントリーの暗号化が実現されるであろうという話。でもこれはまだ実現していないと。

そして、パスワード制限は脆弱で、Atom フィードによる暗号化が実現されていない今、でもセキュアな syndication 手段は必要だ、さてそこでどうするか、User script で Remix だ! という Web 2.0 的な考え方。

それから、エントリーの全体を暗号化するのではなく、class="encrypted blowfish" で指定したブロックのみを暗号化するという microformat 的な解決手段など。

加えて、JavaScript で Blowfish を復号化するための実際のコード。かなり密度の高いエントリーです。この辺の話題に興味のある方は必見かも。