悪霊にさいなまれる世界 -The Demon-Haunted World

30代独身機械系技術者が雑記/セキュリティ/資産運用なんかを書きます/PGP・GPG Key:BC884A1C8202081B19A7A9B8AB8B419682B02FF8

Cloudflareが公開NTPサーバを開始した由

blog.cloudflare.com

昨年は公開DNSゾルバ(1.1.1.1)を公開したCloudflareが、今年は公開NTPサーバを開設した。通常のNTPの他に、TLS1.3で認証・暗号化されるNTS(Network Time Security)にも対応しているらしい(ただしNTSはまだRFCがドラフトの筈だ)。また、Googleの開発したシンプルな時刻合わせプロトコルRoughtimeにも対応とのこと。いずれにせよラウンドロビンでネットワーク的に近いサーバから時刻合わせをしてくれるらしい。CDNなのだから当然である。

roughtime.googlesource.com

Cloudflareの開発者Sullivan氏の呟きによると、NTPのStratumは3らしいが、Stratumは負荷分散の仕組みであり別に上位であれば良いというものではないので問題ない。気になるならGPSから直接PPSを受信してStratum1のサーバにしてしまえばいい。

せっかくなのでRaspberryPiの時刻合わせサーバに追加することにした。方法は以前も紹介したとおりsystemd-timesyncdを使用する。

時刻合わせにNTPdではなくsystemd-timesyncdを使うようにした話 - 悪霊にさいなまれる世界 -The Demon-Haunted World

/etc/systemd/timesyncd.confを開いて、FallbackNTPに追加する。

NTP=ntp.jst.mfeed.ad.jp
FallbackNTP=ntp.ring.gr.jp time.cloudflare.com

この設定ならば基本的にはmfeedに時刻を取りに行き、ダメならRingプロジェクトに、それでもダメならCloudflareに問い合わせる、筈である。

何故メインで使わないのかというと、公開DNSといい、テックジャイアントによる支配が怖いから…などと今さら過ぎるのではあるが、気分の問題である。いじょ。

「閲覧には特別な技術が必要で、さまざまな違法行為が当局の目を盗んで行われている」サイトにアクセスする

bunshun.jp

では「特別な技術」を暴露しましょう。

  1. Torブラウザをインストールする
  2. 「(サイト名) .onion」でググる
  3. 出てきたオニオンアドレスをTorブラウザにぶち込む

以上です。もったいぶるほどのものではない。Wallstreet Marketとやらはテイクダウンされてるが、多分redditなり4chanなりで調べれば新しいところが見つかるんじゃないかな。私は興味が無いので各位で調べてください。

Torブラウザのインストール方法は以前説明ずみ(下記記事後半)

science-as-a-candle-in-the-dark.hatenablog.com

これだけだとあんまりなのでもう少しTorでしかアクセスできないサイトを紹介しておこう。

もちろん、オニオンサービスだけでなく通常のサイトもTorブラウザでアクセスすることにより暗号化トラフィックを増やすことは、検閲・大規模監視のコストを上げるためとても重要。常日頃からTorブラウザを使いましょう。Android版もリリースされてます。

play.google.comいじょ。Happy Hacking!

RaspberryPi 1BでBCM2835内蔵のウォッチドッグを有効にした

VPNサーバ兼バックアップ用に動かしているRaspberryPi 1B、ちょっとアクセスしにくい場所に置いてあるので何らかの理由でバグって停止すると再起動が面倒。なのでウォッチドッグ使って異常時に再起動をするようにした。

調べてみるとRaspberryPiのSoCであるBCM2835にはあらかじめウォッチドッグ機能がついているので特にソフト等をインストールする必要は無い模様。なので以下サイトを参考に有効化してみた。

Raspberry PiにハードウェアWatchdogを設定してみましょう | CANDY LINE Blog

内容はリンク先の前半部をそのままやっただけである。試しに初期状態のまま、システムをハングアップさせてしまうFork爆弾を打ち込んでみる。

:(){ :|:& };:

f:id:scienceasacandleinthedark:20190503152656p:plain

完全にハングアップです。本当にありがとうございました。こうなると電源ケーブルを抜いて強制再起動しかない。

ざっくりとしたシステムの流れとしては、

  1. 「SoCは設定した間隔内でハートビート信号が来ることを期待している」
  2. 「正常動作中はsystemdが別に設定された間隔でハートビート信号を送信する」
  3. 「ハートビート信号を受信すればSoCは正常動作と判断」
  4. 「ハングアップするとsystemdからのハートビート信号が途絶える」
  5. 「SoCはハングアップを検出して強制再起動」

ということになる、らしい。それではサクサクと設定していく。

まずウォッチドッグ機能を有効にする設定。/boot/config.txtを開いて一番下に下記行を追加。

#Enable watchdog
dtparam=watchdog=on

続いてSoCのカーネルモジュールの設定。/etc/modprobe.d/bcm2835-wdt.confを新規ファイルとして作成し、

options bcm2835_wdt heartbeat=20 nowayout=0

の一行を作成。これでBCM2835が20秒以内にハートビート信号を期待する設定となる。参照サイトでは14秒となっていたが、何となくキリが悪いので20秒にした。

最後にsystemdからハートビートを送信させる設定。/etc/systemd/system.confを開き、コメントアウトされている#RuntimeWatchdogSec=0を探してその下に一文を追加。

RuntimeWatchdogSec=10

これでsystemdから10秒おきにハートビート信号が送信されるはずである。期待時間が前述の通り20秒なので、1回は何らかの理由で跳んでも大丈夫だろう。設定を有効にするためrebootで再起動。

再起動したら有効になっているか、起動ログから確認する。

dmesg | grep bcm2835-wdt

有効化されていれば以下のような一行が表示される。冒頭の数字は起動からの秒数らしいので毎回異なるはず。

[ 0.902386] bcm2835-wdt 20100000.watchdog: Broadcom BCM2835 watchdog timer

これでOKである。試しに前述のFork爆弾をもう一度打ち込んで様子を見てみる。

:(){ :|:& };:

待つこと数分

f:id:scienceasacandleinthedark:20190503155309j:plain

 今回はちゃんと自動で再起動。ちゃんと監視が効いている模様なのでOKである。いじょ

兵庫県警ブラクラ摘発事件の冤罪被害者に寄付をした #alertloop

だいたいタイトルオンリーである。少額ではあるが本件寄付を行った。

www.hacker.or.jp

 

家宅捜索を受けた3名のうち、2人は金銭上の問題で弁護士が付けられないという。裁判を受ける権利を行使できないまま、略式命令で罰金刑というタワゴトが通ってしまうなど、ネットユーザの端くれの隅っこの出涸らしとして断固として許せない。

今は亡き47氏こと金子勇氏のWinny裁判の時にも寄付をしたが、あの頃よりは多少自由なお金が増えたので、今後も進展があれば積極的に追加で寄付をしていこうと考えている。

RaspberryPi 3B+に公式リポジトリを追加して最新のTorを入れてリレーノードを構築した

f:id:scienceasacandleinthedark:20190324202252j:plain

Twitterで呟いたのでこちらでも。

基本的にはTor公式サイトのHow to通りにやればよい。

…が、わざわざ太字で"Rasbian is not Debian"と太字で書いてある。

結論的に言ってしまうとRaspberryPi1A/BはCPUアーキテクチャがARMv6のため正常に動かない。RaspberryPi2以降はARMv7/8なので問題なく動作する

一番お手軽なのはDebian公式リポジトリからのインストールである。

sudo apt install tor

しかしこの場合、ver.2系列の古いバージョンがインストールされてしまう。メンテはされているので動くのだが、Tor公式リポジトリから最新バージョンをインストールするのが好ましい。難しくはないのでサクサクと設定してしまおう。

aptのソースリストを開く。

sudo vim /etc/apt/sources.list

しかる後下記二行を追加。

deb https://deb.torproject.org/torproject.org  stretch main
deb-src https://deb.torproject.org/torproject.org  stretch main

これでTor公式リポジトリが追加された。が、以前blogで書いたとおり、パッケージにはPGP/GPGによる署名がされているので、Tor公式リポジトリの公開鍵を設定する必要がある。

sudo curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | sudo gpg --import
sudo gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add -

上の行がcurlで公開鍵をDLしGPGに登録、下の行がその公開鍵をaptに追加である。

あとはパッケージリストを交信すれば最新版のTorをインストールできる

sudo apt update
sudo apt install tor

 続いて設定である。設定ファイルを開く

sudo vim /etc/tor/torrc

 延々と書いてあるが最低限の設定でいい。

ORPort 443
DirPort 9030
RelayBandwidthRate 1000 KBytes
RelayBandwidthBurst 2000 KBytes
ExitPolicy reject *:*
ExitPolicy reject6 *:*
ExitRelay 0

これでTorの待ち受けポートが443/tcpディレクトリリストの待ち受けポートが9030/tcpになる。ここら辺のポートやRelayBandwidthRateで設定できる帯域はお好みで構わない。なお、出口ノードになるのはリスクが多すぎるのでオススメしない。この設定でも全てリジェクトしている。

ルータでのポートの開け方などなどはメーカでバラバラなので各位で行って欲しい。

設定が終わったならば再起動。

sudo systemctl restart tor

Torの起動には数分かかるので、一服した後、Syslogで起動を確認する。

less /var/log/syslog

で一番下の方にTorの起動に関するログが残っているはずだ。"Bootstraped 100%"の後に "Self-testing indicates your DirPort is reachable from the outside. Excellent. Publishing server descriptor."と表示されていれば問題ない。

ここで少し上の方を見ると、"Your Tor server's identity key fingerprint is 'Unnamed ****************************'"と表示されているはずだ。これがあなたのTorリレーのFingerprintとなる。

この一意の識別子になるFingerprintの秘密鍵は"/var/lib/tor/keys"に保管されている。Rasbianを再インストールしたり、別のRasPiで動かすときにFingerprintを引き継ぐことを考えて鍵はバックアップを取っておこう。

sudo tar cvfz tor_keys_raspi.tar.gz /var/lib/tor/keys/

でホームにバックアップを作成し、母艦PCなり別なUSBに保管する。

起動から3時間程度でTorネットワークの一覧に登録される。

metrics.torproject.org

このRelaySearchで、先ほど確認した自分のFingerprintを入力しよう。問題なく初めてTorネットワークに登録された時間や起動時間、帯域などが表示されていればリレーノードの開設は成功裏に終了である。

 

現状、日本のTorリレー数は120程度と寂しいので少しでもリレーが増えて欲しい。以上。

Windows環境でのPGP/GPG(Gpg4win)の使い方(初期設定、実用編)

DL・インストール編から続く

さて、インストールが終わったらフロントエンドであるKleopatraを起動してみよう。鍵ペアの作成を促されるはずだ。ここで自分の鍵ペアを作っておく必要がある。"New Key Pair"をクリックして鍵の作成に取りかかる。注意点が二点あるが後述する。

その前に、一応GPGの鍵ペアの仕組みについて簡単に確認しておく。鍵ペアは公開鍵と秘密鍵の二つの組み合わせである。その名の通り公開鍵を他者に公開して暗号化して貰い、自分だけ所有する秘密鍵で解読する。例えれば、開いた状態の南京錠を配布して箱をロックして貰い、マスターキーを持つ自分だけが開けられる、と言うイメージがわかりやすいだろう。

そして今回メインで行うファイルの署名の検証は、逆に秘密鍵でファイルを署名して貰い、その署名ファイルと公開鍵からファイルの検証を行う。正しい署名が出来るのは秘密鍵の持ち主、つまり所有者だけである、と言う考え方だ。

鍵ペアの作成自体は名前とメールアドレスを入れて、ほぼデフォルトのままで進めて構わない。興味があれば詳細設定でアルゴリズムや有効期限を弄ってもいい。

f:id:scienceasacandleinthedark:20181111183346p:plain

f:id:scienceasacandleinthedark:20181111183350p:plain

f:id:scienceasacandleinthedark:20181111183357p:plain

そしてパスワードである。パスワードは当然使い回しなどしてはいけない。十分強度の高いモノを作成しよう。

f:id:scienceasacandleinthedark:20181111183457p:plain

これで鍵ペア完成する。ここで注意点その1,必ず"Make a Backup Of Your Key Pair"で鍵ペアのバックアップを取っておくこと。秘密鍵を失うとデータがそこにあってもほぼ永久に読めないことになる。

f:id:scienceasacandleinthedark:20181111183726p:plain

(なお上に表示されているキーはチュートリアルのために作ったものなので、私の本来のPGP/GPG鍵のFingerprintとは異なる)

そして注意点その2,鍵の失効証明書を作っておくこと。失効証明書とは、秘密鍵が流出、あるいは紛失した場合などに、「この鍵はもう使うな」と言うことを宣言するためのファイルである。自分の鍵を右クリックして詳細を表示し、"Generate revocation certificate"から作成する。先ほど作った鍵ペアのバックアップと一緒に大事に保管しておかなければならない。

f:id:scienceasacandleinthedark:20181111184231p:plain

さて、本来であればこのあと、作成した公開鍵を公開鍵専用サーバにアップロードし、世界中の人々があなたの公開鍵を入手できるようにする…のだが、ハッキリ言えばオススメしない。一旦アップロードした公開鍵は削除することが不可能であり(だからこそ失効証明書が必要なのだ) 、またメールアドレスが公開されることになるのでSPAMが送られてくることがある、などの理由だ。

 

そういうわけで、他ユーザの公開鍵の取得・署名ファイルの検証の説明に入る。何がいいか迷ったが、ここはオーソドックスにWindows用Tor Browserをダウンロードし、ファイルの検証をして見よう。

https://www.torproject.org/index.html

Downloadをクリックすればすぐにダウンロードページに入る。ここで日本語版を選択し、"DOWNLOAD"で本体を、右下にある小さい"sig"で署名ファイルを保存する。署名ファイルは単にクリックするとテキスト形式で開かれてしまうことがあるので、その場合は「名前を付けてリンク先を保存」をすれば良い。

f:id:scienceasacandleinthedark:20181111185443p:plain

ダウンロードが終了したならば、本体のファイル"torbrowser-install-win64-8.0.3_ja.exe"と署名ファイル"torbrowser-install-win64-8.0.3_ja.exe.asc"を同じフォルダに置いた状態で、署名ファイルをダブルクリックする。Kleopatraに関連付けられているはずなので、自動で検証が始まるはずだ。しかし、

f:id:scienceasacandleinthedark:20181111193143p:plain

"This date could not be verified"、つまり検証不可である。署名しているTor Projectの公開鍵を持っていないので当然である。なのでここでSearchを押して公開鍵サーバから公開鍵の検索を行う。

f:id:scienceasacandleinthedark:20181111193725p:plain

さて、検索の結果このような鍵が表示された。この鍵が本当にTor Browser Developersの鍵なのか、あるいは何者かがその名を騙ってサーバにアップロードしたものか判断しなければならない。鍵ペアにはその信用性を担保する16進法40桁160ビットの「フィンガープリント(Fingerprint)」があり、これが一致すればよい。…のだが40桁は長すぎるので、かつては「フィンガープリント」の下8桁、今では16桁の鍵ID(Key-ID)を使う。上の画面でも右端に"4E2C6E8793298290"と言う値が表示されている。

ではここでTor ProjectのWebサイトに戻り、この鍵IDが正しいか確認してみる。

www.torproject.org

f:id:scienceasacandleinthedark:20181111195006p:plain

上の方に確かに"0x4E2C6E8793298290"(0xは16進数の意味)という鍵IDが表示されている。よってこの鍵は確かにTor Browser Developersの鍵だと考えていい。「インポート」を押してこの鍵をダウンロードする。さらに確認画面が出るはずだ。

f:id:scienceasacandleinthedark:20181111195344p:plain

「はい」を押す。この鍵を本当に認証するか、と言う確認画面が出る。ここでは16桁の鍵IDだけでなく、「フィンガープリント」が正しいかまで確認する。

f:id:scienceasacandleinthedark:20181111195431p:plain

先ほどのTor ProjectのWebサイトで、鍵IDだけでなく「フィンガープリント」も掲載されているので確認する。

f:id:scienceasacandleinthedark:20181111195718p:plain

"EF6E 286D DA85 EA2A 4BA7 DE68 4E2C 6E87 9329 8290"が「フィンガープリント」である。これは確かに一致するので、「フィンガープリントを検証しました」にチェックを入れて進む。

f:id:scienceasacandleinthedark:20181111195907p:plain

これはデフォルトの「自分自身のためだけに署名する」でいい(後述)。「署名」を押す。あなたの鍵ペアのパスワードの入力を求められるので、入力して署名する。

f:id:scienceasacandleinthedark:20181111200023p:plain

さぁこれで、"torbrowser-install-win64-8.0.3_ja.exe"の検証が完了した。間違いなくTor Browser Developersがこのファイルを作成して署名して以降、ファイルが改ざんされていないことが証明されたのである。これでGpg4winによる署名の確認法は以上である。基本的に同じことをすれば良い。

 

ここから余談:

勘のいい人は気付いたはずだ。「フォートミードやラングレーにいる攻撃者がファイルだけでなく、鍵IDやフィンガープリントを表示するページも改ざんしていたらどうするのか?」と言う問題である。

解決策として二種類のアプローチがある。まず一つは、DL・インストール編でGpg4winをダウンロードしたときに使った「何かしらを完全かつ無条件に信頼する」という方法である。しかし、MicrosoftMozillaGoogleを本当にそこまで信用していいのだろうか? そして一方、OSすら信用できないのであれば何を信用するのか。と言うジレンマが生じる。

そこでもう一つのアプローチが、PGP/GPGが使う「信頼の網("Web of Trust")」モデルである。簡単に言えば「友達の友達は信用できる」というヤツだ。Tor Browser Developersの公開鍵を署名するときにデフォルトの「自分自身のためだけに署名する」を選択するように指示したが、ここで「見る人全てのために署名する」を選び、鍵サーバにアップロードすると、「あなたがこの鍵を信用した」と言うことが今後Tor Browser Developersの鍵をダウンロードした人すべてに伝わる。そうすればあなたの知り合いは安心して使える、と言う理屈である。欠点は言うまでもない。あなたはTor ProjectのWebサイトを見て署名しただけなので攻撃者により騙されているかもしれない。

f:id:scienceasacandleinthedark:20181111202257p:plain

あるいはKleopatraから証明書ファイルを右クリックして詳細からCertificationsを見ると、上のようにこの鍵に署名してくれている人がたくさん出てくる。しかし、あなたの友達は多分1人もいないだろう。

これら二つのアプローチはどちらも有用だが完璧ではない。弱点がある、と言うことを踏まえた上で利用する必要がある。もし邪悪な国家権力が腐敗している証拠をジャーナリストに渡すのであれば、これを踏まえた上でさらに手順を踏む必要があることを忘れないでいただきたい。

Windows環境でのPGP/GPG(Gpg4win)の使い方(DL・インストール編)

まず最初に断っておくと、PGP/GPG(以下GPGで統一する)は当初考えられていたメールの暗号化ソフトとしては既に死んでいる。偉大ではあるが誰も使っていない90年代のテクノロジーである。二者で秘密通信を行いたいならSignalかOTRでも使おう。

では何のためにインストールするのか、あるいは現状使われているのかというと、ダウンロードしたファイルの正当性の検証、つまりそのファイルが何者かによってすり替えられていないかを確認するためである。

たとえばDebianUbuntuのユーザがAPTを使いパッケージをダウンロードすると、自動でGPGによる検証が行われる。さらに言えばDebianのイメージ自体にも検証ファイルが添付されている。

Verifying authenticity of Debian CDs

そういうわけで、LinuxユーザならばほぼデフォルトでGPGがインストールされているのだが、残念ながら未だにデスクトップ環境の大多数を占めるWindowsではそうではない。

本稿はWindowsユーザを対象に、GPGフロントエンド(Gpg4win)のインストール、自身の暗号鍵(公開鍵・秘密鍵)及び失効証明書の生成、他ユーザの公開鍵の取得・署名ファイルの検証の説明を行う。

 

そういうわけでまずはダウンロードとインストールである。Gpg4winのサイトからダウンロードすればいいだけである…と書きたいのだが、残念ながらそうは問屋が卸さない。小さい問題と大きい問題が一つずつある。

小さい問題は大したことは無い。Gpg4winは寄付を求めるため初見ではダウンロードの方法がわかりにくいという点だが、これは説明を読めば問題ない。

大きい問題は…これはGpg4winに限らず検証に必ずつきまとう問題だが、「今回ダウンロードするGpg4winの正当性はどう検証するか?」である。と言うか本来、その検証を行うためにGPGを使いたいのだ

もちろんGpg4winのサイトにはファイルのハッシュ値や、OpenPGP signatureが置かれている。しかし、もし攻撃者がサイトを既に乗っ取っていたらそれらは信用できない。

つまるところこの場合、我々は「完全かつ無条件に信頼する」ものが必ず必要となる。通常、OS(と言うかEdge、IE)やブラウザにプリインストールされている証明書がこれに該当する。通信経路がLet's Encryptで暗号化され、ダウンロードしたファイルの電子署名が正しければ、そのGpg4winは正当なものであると信頼して良いだろう。(この考え方は問題があり、それに対する代案がPGP/GPGの"Web of Trust"と言うシステムなのだが、これらは後述する)

 

話が長くなった。サクサクと作業を進めていこう。

Gpg4win - Secure email and file encryption with GnuPG for Windows

まずはGpg4winのサイトにアクセスし(Let's EncryptでHTTPS接続されていることを確認しよう)、"Download Gpg4win"をクリックする。そうすると寄付を求める画面が出るはずだ。

f:id:scienceasacandleinthedark:20181110213641p:plain

洒落臭いことにデフォルトで15ドルの寄付が選択されていて、"Donate & Download"となっておりダウンロードできない。なので$0をクリックすればボタンが変わり”Download"になる。

f:id:scienceasacandleinthedark:20181110213856p:plain

これで問題なくダウンロードできるはずだ。

ダウンロードしたファイル(現時点ではgpg4win-3.1.4.exeが最新版となる)を検証する。右クリックから「プロパティ」→「デジタル署名」→「詳細」でデジタル署名に問題が無いか確認する。

f:id:scienceasacandleinthedark:20181110224159p:plain

f:id:scienceasacandleinthedark:20181110224210p:plain

これでこのファイルの正当性は検証された、と認識して良い。インストールに進む。

 

インストールはGnuPG本体と、フロントエンドになるKleopatraの二つあれば問題ない。

f:id:scienceasacandleinthedark:20181110224404p:plain

何度かNextをクリックすればインストールは完了するはずだ。これでDL・インストール編は終了となる。初期設定、実用編に続く。