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

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

兵庫県警ブラクラ摘発事件の冤罪被害者に寄付をした #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・インストール編は終了となる。初期設定、実用編に続く。

時刻合わせにNTPdではなくsystemd-timesyncdを使うようにした話

メモがわりの雑記。

RaspberryPi 1B、以前の初期設定では時刻合わせ標準のNTPdを使用してたものの、よく考えるとNTPサーバとしての機能は必要ない。必要の無い機能は削除するのがセキュリティの基本である。

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

そういうわけでNTPクライアントのみの機能に絞ったら何があるかな、と調べてみたところsystemdに標準で何やら着いてる模様。ArchLinuxは相変わらずWikiの充実度が凄いので非Archユーザにも超タメになる。

systemd-timesyncd - ArchWiki

そういうわけでサクサクと設定をする。NTPをまず削除。しかる後にtimesyncdの設定ファイルを設定。

sudo apt remove ntp
sudo vim /etc/systemd/timesyncd.conf

NTPとFallbackNTPの2項があるが、どうやらNTPが落ちてたらフォールバックの方を参照するとかそんな感じらしい。オーソドックスにNICTとntp.orgのプール、あるいはGoogleのNTPでいいだろう。大学ならSINETのサーバがネットワーク的に一番近いかもしれない。

[Time]
NTP=ntp.nict.jp
FallbackNTP=0.jp.pool.ntp.org

timesyncdを起動。

sudo timedatectl set-ntp true

状態を確認

timedatectl status

ここで、Network time onがyesになってればいいっぽい。いじょ

SoftEtherサーバをOpenVPNサーバとして利用する場合に、使用されるハッシュ関数をSHA-1から変更する方法

TL;DR. "○○_openvpn_remote_access_l3.ovpn"を開いて、"auth SHA1"を"auth SHA256"に書き換えろ

 最近blogを書いてないので小ネタ。私の持ってるRaspberryPiはSoftEther Serverを入れてVPNサーバ化している。初期設定方法は以前書いた記事の下の方に、説明無しで書いてある。

SoftEther VPN プロジェクト - SoftEther VPN プロジェクト

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

が、スマホで使える専用クライアントソフトがないので、OpenVPNサーバを有効化して、OpenVPNクライアントソフトから繋いでる。OpenVPNサーバを有効にするには、まずSoftEtherサーバ管理マネージャを開き、下の矢印部分をクリックする。

f:id:scienceasacandleinthedark:20180726213820p:plain

そこで①にチェックを入れれば有効化される。一応、ポートはデフォルトから変更しておくと安心だろう(これは諸説あるが割愛)。OpenVPNの設定ファイルは自力で作るのが難しいので、②をクリックさせて自動で生成させることになる。

f:id:scienceasacandleinthedark:20180726213949p:plain

さて、そうすると"OpenVPN_Sample_Config~.zip"なるファイルが母艦PCにダウンロードされる。その中にある"○○_openvpn_remote_access_l3.ovpn"なるファイルが設定ファイルになる。

これをスマホにコピーして、適当なOpenVPNクライアントソフトをインストールし、この設定ファイルをインポートすれば良い。ここら辺も割愛する。問題なく設定が完了すれば繋がるはずだ。が、問題は、この設定ファイル、デフォルトでは暗号化アルゴリズムがAES-128-CBCハッシュ関数SHA-1を使用する設定となる。ログを見てみるとはっきりするだろう。

f:id:scienceasacandleinthedark:20180726215517p:plain

暗号化アルゴリズムと暗号利用モードは基本的にデフォルトのAES-128-CBCで良いだろう。しかしいまどき危殆化したSHA-1を使う理由はない。さっくりと変更してしまうべきだ。(ちなみにSoftEtherサーバ管理マネージャの「暗号化と通信関係の設定」を弄ってもOpenVPNでの設定には影響しない)

先ほど自動生成した"○○_openvpn_remote_access_l3.ovpn"、中身はテキスト形式なので適当なテキストエディタで開く。ざっと眺めていけば繋ぐサーバのアドレスやポートが書いてあることがわかるだろう。ポイントはファイルの中盤付近にある暗号化・認証アルゴリズムの設定だ。下記の文章が見つかるはずである。

###############################################################################
# The encryption and authentication algorithm.
# 
# Default setting is good. Modify it as you prefer.
# When you specify an unsupported algorithm, the error will occur.
# 
# The supported algorithms are as follows:
#  cipher: [NULL-CIPHER] NULL AES-128-CBC AES-192-CBC AES-256-CBC BF-CBC
#          CAST-CBC CAST5-CBC DES-CBC DES-EDE-CBC DES-EDE3-CBC DESX-CBC
#          RC2-40-CBC RC2-64-CBC RC2-CBC CAMELLIA-128-CBC CAMELLIA-192-CBC CAMELLIA-256-CBC
#  auth:   SHA SHA1 SHA256 SHA384 SHA512 MD5 MD4 RMD160

cipher AES-128-CBC
auth SHA1


###############################################################################

この"auth SHA1"を"auth SHA256"に変更して保存する。もちろんSHA384や512でもいい。先ほどと同様にこの設定ファイルをインポートして接続、ログを確認すればSHA-256が使用されていることが分かるはずだ。 

f:id:scienceasacandleinthedark:20180726220315p:plain

思わず暗号化アルゴリズムも国産のCamelliaなどに変更したくなるが、大抵エラーが出るので自重しよう。むしろちゃんと設定できて、エラーが出なければ環境を教えて欲しい。以上である。

 ちなみになぜIPsec/L2TPを使わないのかというと、設定が複雑すぎるために「本当にセキュアな設定に出来ているのか」が自分ではわからないからである。俺には出来らぁ!!と言う方は頑張って欲しい。

Ubuntu18.04LTSをインストールしてみた

Sandbox兼Linuxの勉強用としてVirtualBoxを使いUbuntu14.04LTSを使っていたけど、流石にそろそろサポート切れが近くなってきたので先日リリースされた18.04LTS日本語Remixを入れてみた。

Homepage | Ubuntu Japanese Team

18.04からは軽量インストールがオプションで選べるようになり、Firefox以下最低限の環境を簡単に構築できるようになったので、サクサクとインストール。

しかし、なぜか実用に耐えないレベルに動作が遅い罠。インストール直後はわりと軽く動くのに、何度か再起動すると無茶苦茶重くなる。

なんぞようわからんなぁ…と思いつつ試行錯誤をしたところ、14.04LTSでは3Dアクセラレーションを有効にしてグラフィックがChromium(これが何かよく分からない)にしないとモッサリしまくりなのだけど、逆に18.04LTSでは3Dアクセラレーションを有効にしてしまうと重くなってしまう模様。llvmpipe(これが何かもよく分からない)なら普通に動く。たぶんデスクトップ環境がUnityからGNOMEに変わったせいなのかな、と思いつつもよく分からない。とりあえず動くなら良いかな。

f:id:scienceasacandleinthedark:20180528194802p:plain

f:id:scienceasacandleinthedark:20180528194856p:plain

しかし18.04だとUbuntuソフトウエアでソフトを探しても、今まで使ってたのが出てこない件。まぁ14.04サポート切れまであと1年あるので、のんびりやっていく次第。