スキップしてメイン コンテンツに移動

投稿

ラベル(セキュリティ)が付いた投稿を表示しています

Thunderbirdで標準搭載されたPGPによる暗号化を利用する

電子メールクライアントのMozilla Thunderbird 78でやっとOpenPGPの機能が標準搭載された。 とはいっても、78.0.1ではまだ不完全で、78.1.0でほぼ完成したようだが、デフォルトではOpenPGPは使えない。今後リリース予定の78.2からデフォルトで動作するようになるらしい。 78.1.0で使うためには、「オプション」の「一般」の一番下の「設定エディター...」を開き、 mail.openpgp.enable を true にする必要がある。 ただし、設定をいじると動作保証対象外になるので、自己責任で対応すること。 今回の動作検証ではWindows 10上で実行させた 64ビット版Thunderbird 78.1.0 を使っている。 設定を済ませたら、「エンドツーエンド暗号化」のOpenPGPの「Add Key...」で秘密鍵をインポートもしくは作成する。 GnuPG などですでに鍵を作っているのであれば、それをエクスポートして読み込ませるだけだ。 公開鍵をインポートする場合、「OpenPGP Key Manager」の「Import Public Key From File」で対応可能だ。 早速、メールを作成し、「セキュリティ」から「暗号化が必要」と「このメッセージにデジタル署名」を選択して送信する。 メッセージは自分自身に送っているのであまり意味はないが、それぞれの機能がきちんと動作していることを確認することはできる。 この通り、暗号化とデジタル署名ができていることを確認できた。 PGPは昔からあるが、自分の周りでは使われているのをほとんど見たことがない。 Thunderbirdに標準搭載されたのを機に、広まってくれないだろうか。

コマンドラインで動作するOAuth対応TwitterクライアントをPythonで作ってみた

6月末にTwitter APIのBASIC認証が終了してしまうので、OAuth対応のTwitterクライアントを作ってみることにした。とりあえず最もシンプルだと思われるコマンドラインで動作するクライアントをPythonで作成してみた。 まず、Twitterクライアントを作成する前に、Twitterのサイトで OAuthクライアントの登録 を行わなくてはならない。ここで、「アプリケーーション名」、「アプリケーションの説明」、「アプリケーションのウェブサイトURL」を記入する必要がある。また、今回はPC上で実行するクライアントで読み書きを行いたかったので、「あなたの招待状」には「送信」、"Default Accdess type"には"Read & Write"を選択した。 登録を済ますと、"Application Details"のページで"Consumer key"と"Consumer secret"が与えられるので、これを作成するアプリケーションで利用する(CONSUMER_KEY, CONSUMER_SECRET)。 次にコーディングだが、できるだけ短くシンプルに作りたかったので、Python外部モジュールの twitter 、 oauth 、 oauthtwitter を利用させてもらうことにした。ただ、 作者のページ のコードでは途中でエラーになってしまうので、 oauthtwitter.pyのOAuthApiクラスのgetAccessTokenメソッドの下に以下のgetAccessTokenWithPinメソッドを追加した。 def getAccessTokenWithPin(self, pin, url=ACCESS_TOKEN_URL): token = self._FetchUrl(url, parameters={"oauth_verifier": pin}, no_cache=True) return oauth.OAuthToken.from_string(token) 今回作成したTwitterクライアントの使い方だが、 tw.py で最新のタイムラインを表示する。取得件数...

Google App EngineとSafe Browsing APIを利用して短縮URLチェッカーを作ってみた

最近、Twitterやはてなブックマークなどを使うことが多くなり、字数制限付きのコメントを書くことが増えた。コメント中にURLを入れたいこともままあるのだが、長いURLだと字数をオーバーしてしまう。そのため短縮URLを使っているが、コメント内に直接短縮URLを入れるのがやっかいだった。そこで、 Google App Engine (GAE) を使ってシンプルで高速な短縮URL変換ツールを作成してみた。 しかし、短縮URLは悪意のあるサイトの判別が難しいという欠点がある。見た目で判断できないので開くのを躊躇してしまう。そこで、今回作成したツールでは、短縮URLに変換するだけではなく、それを元のURLに戻す機能も追加した。さらに、 Google Safe Browsing API を利用してフィッシングサイトなどの悪意あるサイトの判別も試みている。 短縮URLチェッカー 使い方はシンプルで、テキストボックスに変換したいURLを入力すればbit.lyの短縮URLがテキストボックス表示され、bit.lyの短縮URLを入力すればもとのURLが表示される。テキストボックスをクリックすれば表示されているURLが選択されるのでクリップボードへのコピーも簡単だ。テキストボックスの下には展開されたURLがリンク付きで表示されるが、もしフィッシングサイトだと疑われる場合は、以下のように警告してくれる。 さて、今回のコード作成だが、bit.lyによる短縮URLの変換は簡単だった。というのも 以前にPythonスクリプトで作った ことがあるからだ。それをそのままGAEに載せればいい。しかし、Safe Browsing APIによる悪意あるサイトの検出は思ったよりも面倒だった。まず、APIの使い方がよく分からない。使う前は任意のURLをAPIで確認するのかと思っていたのだが、そうではなく、MD5でハッシュ化したリストをダウンロードして、調べたいURLをハッシュ化してそれと照らし合わせなくてはならない。今回問題になったのはそのダウンロード容量で、フィッシングサイト用データが700KB程、マルウェア用データが10MBを超えていた。GAEでは一回のダウンロード容量の上限が1MBと決まっており、フィッシングサイト用データは何とかダウンロードできても、マルウェア用データは途中で切れ...

HTTP CookieとFlash Cookieとで同期を行う

前回 に引き続き、今回もCookie関連の記事だ。 ITmedia の ユーザーが制御できない「秘密cookie」、半数強のサイトが利用 という記事で、「ユーザーが削除したHTTP cookieを、Flash cookieを使って復活させているケース」があると書かれているが、技術的には簡単だ。 まず、HTMLのhead内にJavaScriptでdocument.cookieを設定・取得する関数を定義する。Flash (ActionScript 3.0)側では、flash.external.ExternalInterfaceを利用してHTTP Cookieを取得する。もし、取得できなければFlash Cookie (Local Shared Object, LSO)の取得を試みる。両方とも取得できない場合は、初めての利用と判断される。どちらか一方を取得できたのなら、もう一方に対して取得した値を渡す。これにより、どちらかが削除されたとしても再読み込みした際に、HTTP CookieとFlash Cookieとで同期され、削除されたデータは復元する。 異なるCookieの同期はデータの永続性を強固にする利点があるが、削除したつもりのデータが実は消えていないということも起こり得るわけで、セキュリティの面からするとあまり良くないかもしれない。これを防ぐためには、Cookieの制御に関する正しい知識を持つしかないだろう。 前回の記事 でも書いたが、Flash Cookieについては グローバルストレージ設定パネル の「今後表示しない」を選択することで禁止することができる。既に書き込まれているFlash Cookieは、 Webサイトの記憶領域設定パネル から、削除や禁止、ディスク容量の調整などが行える。また、HTTP Cookieについてはブラウザの設定で削除できる。 最後に、「 ActionScript 3.0でFlash Cookieを利用する 」で作成したプログラムを、HTTP CookieとFlash Cookieとで同期させるように変更してみたので、そのソースコードを以下に示しておく。赤字は前回からの修正箇所となる(クラス名などは除く)。使用する際は、HTMLのhead内に、 <script language="JavaScript...

ActionScript 3.0でFlash Cookieを利用する

ユーザーが制御できない「秘密cookie」、半数強のサイトが利用 という ITmedia の記事を読んで、実際どの程度のものかを理解するためにActionScript 3.0でFlash Cookieを利用してみた。因みに、ここで言う秘密CookieやFlash Cookieはローカル共有オブジェクト(Local Shared Object, LSO)と呼ばれるもので、Flash PlayerがユーザーのPCに保存するデータのことだ。 早速、ActionScript 3.0でLSOを利用したFlashコンテンツを作成してみた。作成するに当たって、 ActionScript 3.0コンポーネントリファレンスガイド の SharedObject を参考にした。 プログラムはコンテンツを読み込んだ回数をLSOに保存する。初めてコンテンツを読み込んだ場合は、「初めてお会いしますね」と表示され、2回目以降は「お会いするのは2回目ですね」のように表示される。また、LSOの保存領域が保存するデータよりも小さい場合は「ここは狭すぎます…」、保存が禁止されている場合は「私を拒絶するのですか?」と出力される。保存したデータを削除する場合は、エスケープキーを押すことで「さよなら…」と出て削除される。 LSOの制御方法だが、 グローバルストレージ設定パネル の「今後表示しない」を選択することでLSOを禁止することができる。また、ディスク容量を0KBにすると、禁止はされないが容量不足により書き込みができなくなる。既に書き込まれているLSOについては、 Webサイトの記憶領域設定パネル により、削除や禁止、ディスク容量の調整などが行える。 Flash Cookie、そこまで騒ぎ立てるほどのものではないと思うが、気になる人は設定で禁止なり削除なりすればよいと思う。コンテンツ制作者側からすれば便利なのは確か。 以下、ソースコード。 SharedObjectTest.as // SharedObjectTest by nox, 2009.8.14 package { import flash.display.Sprite; import flash.text.* import flash.events.*; import f...

Processingを使ってWebカメラを監視カメラにする

Processing の videoライブラリ を利用して、手持ちのWebカメラを防犯・監視カメラにしてみることにした。監視カメラとして、以下の2点を満たすこととする。 動くものを捕らえたときだけ写真を残す。 写真は指定のメールアドレスに直ちに送信される。 今回、コードを書くに当たって、Webカメラ関連については 建築発明工作ゼミ2008 、メール送信については E-mail Processing を参考にさせてもらった。特に 建築発明工作ゼミ2008 については他にもProcessing関連の有益な情報があって重宝する。 因みに、今回用いたWebカメラはずいぶん前に購入したLogitechのQuickCam for Notebooks Proだ。多分、大抵のWebカメラで問題なく動作すると思う。 それでは、早速作成してみる。 下準備 まず、ProcessingでWebカメラを利用するには、 QuickTime が必要になるので予め用意しておく。また、WindowsについてはQuickTimeでWebカメラを利用するための VDIG (QuickTime-compatible video digitizer) をインストールする必要がある。このとき、最新バージョン(1.04/1.05)では動作時にエラーが起こるようなので、バージョンは1.01を用意すること。 次に、Processingでメール送信を行うために、 JavaMail と JavaBeans Activation Framework (JAF) をダウンロードする。JavaMailからmailapi.jarとsmtp.jar、JAFからactivation.jarを取り出す。そして、Processingの作業フォルダ(コーディングしているファイルの存在するフォルダ)にcodeという名前のフォルダを作成し、その中にその3つのjarファイルをコピーする。 これで下準備は完了だ。 コーディング ライブラリについては、ビデオ関連でprocessing.video、電子メール関連でjavax.mailをインポートする。setup関数でvideoオブジェクトを作成し、draw関数で映像を表示する。今回は320×240の解像度に設定した。次にカメラの映像から、以前の画像と現...

Googleの暗号化ツールKeyczarをPythonで使う

Keyczar から持ってきた Keyczar Python (0.5b) を適当なディレクトリに展開し、srcファイル内のkeyczarをPythonディレクトリのsite-packatesにコピーする。次に、 PyCrypto 、 simplejson 、 ASN.1 tools for Python から必要なモジュールをダウンロードしインストールする。 KeyczarTool のPythonの実装として、keyczart.pyが提供されているのでこれを利用する。ただし、これにはバグがあり、そのままだとAddKeyを実行できない。詳細は以下に報告されている。 Issue 21: Incorrect AddKey() Call from keyczart.py main() 対処方法としては、 svnで最新版を持ってくる か、以下のようにソースを修正する。 keyczart.pyの113行目の def AddKey(loc, status, crypter=None, size=None): を def AddKey(loc, status, size =None, crypter =None): に変更する。 実際に平文を暗号文にし、さらにそれを平文に戻してみる。その前に鍵を作る必要があるので、keyczart.pyで作成する。--locationには鍵を作成したいディレクトリを指定すること。 keyczart.py create --location=C:\users\keyczar\keyset --purpose=crypt keyczart.py addkey --location=C:\users\keyczar\keyset --status=PRIMARY ここで気を付けなくてはならないのは --status=PRIMARY で指定する文字を大文字にする必要があることだ。マニュアルやコマンドの使い方では小文字になっているが、小文字で指定すると鍵の情報が正しく書き込まれない。たぶんバグだろう。 で、ここまで準備ができれば後は以下のように使用できる。 #!/usr/bin/env python from keyczar import keyczar crypter = keyczar.Cry...

Google App Engine: OpenID

GoogleでOpenIDを取得する というエントリでも書いたが、Google App Engineで OpenIDを取得できる 。さらに、 OpenIDを利用したコンシューマ向けのサンプルサイト も立ち上がっている。どちらも ソースコードが公開されている のが素晴らしい。 最近はOpenIDが流行っているみたいだし、Google App EngineでOpenID認証を使ってみるかな。

GoogleでOpenIDを取得する

Googleのブログサービス Blogger でブログサイトを作れば、そのURLがそのままOpenIDとなる。ブログサイトをわざわざ作りたくない場合は、 OpenID for Google Account というGoogle App Engineのサービスが稼動しているのでこれを利用しよう。これならば、Googleアカウントさえ持っていればOpenIDとしてすぐに使える。 実は、BloggerのURLがOpenIDになっているのを知らずに、日本で最初のOpenIDプロバイダである OpenID.ne.jp でOpenIDを取得したのだが、どうもここのサイトが心もとなく感じたので、少し調べてみると、様々な不安の声が上がっていることを知った。 サーバが落ちる 、 登録確認メールに不具合がある 、 SSLを利用していない 、などなど。そんな声もあってか、ついには究極の個人情報漏洩対策が取られたようで、ここでOpenIDを取得する際、必要な情報はニックネームとパスワードだけになってしまった。メールアドレスさえ必要ないのだ(因みにOpenID作成後に登録・更新可能)。確かに個人情報を登録しなければ漏洩は防げるだろうけど、捨てID作り放題で、OpenIDの信憑性を著しく下げないだろうか。もっとも、OpenID自体は個人の特定には不向きな方法なので、こういうのもありなのか。 と云うわけで、Bloggerを利用している・利用する予定の人や、GmailなどでGoogleアカウントを持っている人は、第三者サイトでOpenIDを作成しなくてもすぐに利用できる。今年はOpenIDが流行るのかなぁ。 追記: 独自ドメインなどでbloggerのOpenIDを利用したい場合、<head></head>内に以下の2行を記述する。 <link rel="openid.server" href="http://www.blogger.com/openid-server.g" /> <link rel="openid.delegate" href="http://ブログ名.blogspot.com/" /> 追記2: OpenID.ne.jpでパスワ...

Python: 続・簡単ステガノグラフィ…画像を画像に埋め込む

前回の なんちゃってステガノグラフィ はあまりにも酷い出来だと思ったので、少しばかり改良してみた。画像データのアルファ値を利用していたのをRGBに置き換え、最下位ビットを利用する方法に変更した。アルファ値だと生データを見れば一発で怪しいと分かるが、RGBだと余程注意深くないと分からないだろう。また、入力データにはテキストだけではなく、バイナリファイルも指定できるようにした。ファイル名は保存されるので、隠したデータを取り出す際もファイル名の指定が不要だ。 使い方は前回と一緒。ただし、上記の理由で出力ファイルの指定はない。 で、上のネコの画像(kitten01.png)に下のモルモットの画像(guinea01.jpg)を隠してみる。 covgraph.py kitten01.png kitten01g.png guinea01.jpg 画像を隠し入れた画像(kitten01g.png)を下に示す。最初の画像と見た目はほとんど変わらない。 取り出すときは以下のようにする。 covgraph.py kitten01g.png ステガノグラフィについての知識なんてほとんど持ち合わせていないので、これがどの程度有効かなんて分からないし、きっと世の中にはもっと効率の良いアルゴリズムなんかがあるのだと思うけど、気にしない。だってお遊びのプログラミングだから。作る過程でいろいろ考えることが楽しいのだ。 追記: 出力画像ファイルにはPNGかBMPを利用するのが良い。JPEGは非可逆圧縮により埋め込むデータが壊れるし、GIFはパレットの制限に引っ掛かるためだ。因みに、入力画像ファイルはどのフォーマットでも問題ないはず。また、このサイトはアップロードした画像を非可逆圧縮するので本記事の画像をそのまま利用してもデータを取り出すことはできません。 以下、ソース(covgraph.py)。 #!/usr/bin/env python # -*- coding: utf-8 -*- """covgraph.py by nox, 2008.4.17""" import sys, os, bz2, zlib from PIL import Image def embed_data(da...

Python: 簡単ステガノグラフィ…テキストを画像に埋め込む

Pythonでなんちゃって ステガノグラフィ を作ってみた。画像データにテキストを埋め込んで、メッセージを隠してしまうというわけだ。お遊びで適当に作っただけなので、本格的な使用に耐えうるものではないことをお断りしておく。 上に示す画像は何も埋め込まれていないもの。下に示す画像には Python: PaSoRiでSuicaの履歴を読み出す の全文が埋め込まれている。 これなら変更したことを誰にも気づかれないだろう。使用したソース(covgraph.py)は下に示す。使い方は、 covgraph.py cover.png stego.png input.txt とする。cover.pngにinput.txtの中身を埋め込み、stego.pngとして出力する。input.txtに代えて直接文字列を指定することもできる。 covgraph.py cover.png stego.png "hello, world" とすれば、stego.pngには"hello, world"が埋め込まれることになる。 埋め込まれた画像からテキストを取り出す場合は、 covgraph.py stego.png もしくは、 covgraph.py stego.png output.txt とする。前者は標準出力、後者はファイルに書き出す。 追記: 今回のソースは書き殴りで汚いしアルゴリズムとしてもよくないと思うので、修正版の Python: 続・簡単ステガノグラフィ…画像を画像に埋め込む の方がましだと思う。 #!/usr/bin/env python # -*- coding: utf-8 -*- """covgraph.py by nox, 2008.4.15""" import sys, os, bz2, base64 from PIL import Image def cover(input_image, output_image, text_data): """テキストデータを画像ファイルに埋め込む. input_image: 入力画像ファイル. ou...

PGP/GPGを薦めたいが…

個人情報漏洩などのセキュリティ問題が深刻になってきているが、それを防ぐための一つの手段として暗号化がある。特にメールの暗号化は重要だ。仕事で個人情報を含む文書をメールで送ったときにもし間違ったアドレスにでも送ろうものなら一大事である。このようなときでも暗号化してあれば安心だ。 ではどのようにして暗号化すればよいか。たとえばWindowsに付属しているOutlook Expressなどでは、暗号化のための仕組みが組み込まれている。しかし、これはデジタル署名が必要であり有料なのだ。もっと手軽に無料で利用できる仕組みは無いものか。実はある。それがPGP/GPGだ。 PGP はPretty Good Privacyの略で、Philip Zimmermannが開発した暗号化ソフトウェアだ。一方、 GPG はGnu Privacy Guardの略で、GnuPGとも呼ばれている。OpenPGPに準拠した無料の暗号化ソフトウェア(GPL)である。PGPとGPGの違いは、PGPは商用で利用するには有料であるが、特許を持つ暗号化アルゴリズムなども利用できる。GPGの方は商用で利用する場合でも無料であるが、特許に抵触するアルゴリズムは採用していない。個人的にはGPGを利用している。Linuxでは普通に使われているし、Windowsでも問題なく導入できる。 しかし、いくら優れた暗号化ソフトウェアであっても、周りが使っていなかったら意味が無い。暗号化して送っても読めないからだ。署名を入れても、それが正しいかどうか分からない。以前、インターネット上の電子メールが出始めた頃に電子メールアカウントを取得したのだが、アカウントを持っている知人がいなかったのでまったく無意味であったが、それと同じ状況だ。 なら、周りの人にもGPGを薦めれば良いかと思うのだが、ある理由で薦めにくいのだ。導入・使用方法が分かりづらいのである。ある程度コンピュータに詳しい人ならばまったく問題ないのだが、そうでないとちょっと面倒だ。PGPの公式サイトではWindowsのバイナリファイルも置いてあるが、それで使えるのはGUI版ではなくコマンドライン版である(個人的にはGUIよりもコマンドラインのほうが使いやすいと思っているが…)。 また、メールソフト自体が手軽にPGP/GPGを使えない場合が多い。GPGで暗号化し...

PythonでHTTPの認証

備忘録:PythonでHTTPのDigest認証を行う をほとんどそのまま。忘れないようにメモ。 Python Challenge のある問題で大変役立った。 import urllib2 top_url = "www.foo.org" url = "www.foo.org/bar.html" username = "user" password = "pass" passman = urllib2.HTTPPasswordMgrWithDefaultRealm() passman.add_password(None, top_url, username, password) authhandler = urllib2.HTTPBasicAuthHandler(passman) opener = urllib2.build_opener(authhandler) urllib2.install_opener(opener) pagehandle = urllib2.urlopen("http://" + url) print pagehandle.info()

Kaspersky Internet Security

先日、とうとうトレンドマイクロのウイルスバスターから Kaspersky Ineternet Security (カスペルスキー・インターネットセキュリティ) に変更した。何度もウイルスバスターがらみでのトラブルがあり、ここ最近でもPCのHDDへのアクセスが数十分も続くことがあり、結局これもウイルスバスターの仕業であったようだ。もっとも今回変更したのはノートPCだけであるが。Kasperskyは価格とライセンス形態に難ありなのだ。 ウイルスバスターを導入する前は、ノートン・インターネットセキュリティを利用していた。しかし、重くてどうしようもなかったので(現在は以前よりも随分軽くなったらしい)、当時、評判の良かったウイルスバスターに乗り換えたのだ。使い始めは良かったのだが、なんというか使うごとに不満が出てきた。自分としては、どうも初心者向けのつくりが気に入らない。いちいちアップデートの表示が出てきたり(多分設定で変えられると思うが)、そうかと思うと、知らないところで勝手にセキュリティ関連プログラムが実行され極度に重くなる。通知無しで起動されると何が原因でシステムが不安定になっているのか特定しにくいことこの上ない。その点、Kasperskyはプログラムが実行されるときにはトレイアイコンが変化するのでわかりやすい。 また、Kasperskyはウイルス駆除率でも定評がある。GIGAZINEの アンチウイルスソフトウェアランキング、最強はどれ? でも1位になっている。より詳しくアンチウイルスソフトを比較したい場合は、 道具解 、 AV-Comparatives あたりが参考になるだろう。 そんなわけで、現在試用版を試しているところだが、今のところ快調だ。試用版は30日間の期間限定だが、それまでにははっきり結論が出せるだろう。

アンチハッカー法

INTERNET Watch によるとドイツで「アンチハッカー法」が先月施行されたらしい。ネット上での攻撃ツールの作成はもちろん、所持もできなくなるとのこと。 これで何が困るかと云うと、セキュリティのチェックなどもできなくなる点。攻撃ツールでセキュリティのチェックは普通に行われているが、そのツールが使えなくなってしまうのだ。そのため、この法律が施行される前からセキュリティ関連の技術者が施行反対のデモ活動が行われていた。 セキュリティの確認が難しくなるドイツのネットが世界各国のクラッカーから狙われたりして。