Kaito Udagawaの環境セットアップレシピ
Non-exportable SSH鍵の作成
Touch ID搭載のMacには、Secure Enclaveという、秘密鍵を軍用レベルのセキュリティで管理する仕組みが備わっています。特に、ECDSA P-256鍵は、Apple標準のSSHと高度に統合されているため使い勝手が良く、SSHによるリモートログインの認証やGitの署名といった日常的なタスクに簡単に活用することができます。
ECDSA P-256による署名検証のメカニズム
-
署名:まず、秘密鍵 S を256ビット整数の形であらかじめ作っておきます。署名者は、その場限りのランダムな256ビット整数 k を決めて、方式ごとに固定の原点 G からECDSA P-256というアルゴリズムで k 回進みます。この時の x 座標(256ビット整数)が r と呼ばれます。次に、データから一意に決定する256ビット整数 D を計算します。 D には一般的にはハッシュやダイジェストと呼ばれる値が使用されます。そして、次の式で s を定めます。
この時の (r, s) の組が「署名」と呼ばれ、データと共に受信者に送信されます。
-
検証:公開鍵 P は、原点 G から S 回進んだ時の xy 座標です。この S は秘密鍵のことであり、公開鍵 P は事前に署名者が計算して共有しておきます。検証者が検証を始める時、以下の2つの長さを計算する必要があります。
- 原点 G から D / s 回進んだ点までの長さ。
- 公開鍵の地点 P から r / s 回進んだ点までの長さ。GP の長さ S が r / s 倍されるので、その位置は原点 G から rS / s 回だけ進んだものに相当します。
二つの計算した長さを足し合わせると、この座標が原点 G から k 回進んだ位置であることが s の定義から導かれるので、正しく計算できていれば結果の x 座標は r (あらかじめ計算しておいた k 回進んだ地点の x 座標)と一致するはずです。これで、秘密鍵 S を使った計算と公開鍵 P と署名 (r, s) を使った計算が、入力 D に対して同じ結果を返すことが確認されたわけですが、この計算にはランダムな要素 k が関わっているので、 S と P と (r, s) の関係を正確に把握している署名者じゃないとこんな奇跡は起こせません。これにより、D が本当に署名者のものであることが証明されました。
- 補足:「ECDSA P-256というアルゴリズムによる操作」が楕円曲線上における計算です。この辺りの計算が巡回群などを形成するため、長さのような概念が構築され、このような計算が可能になります。ところが、楕円曲線上の操作の性質として、長さから操作回数を逆算することが極めて困難であるため(離散対数問題)、それがこのアルゴリズムの安全性の根拠になっています。
TahoeにおけるNon-exportable秘密鍵の作成方法
mkdir -p ~/.ssh && cd ~/.sshsc_auth create-ctk-identity -l "$(whoami)-$(date "+%Y-%m-%d")" -k p-256-ne -t biossh-keygen -K -w /usr/lib/ssh-keychain.dylibgit config set --global gpg.format sshgit config set --global user.signingkey ~/.ssh/id_ecdsa_sk_rk.pubgit config set --global commit.gpgsign truegit config set --global tag.gpgSign true
Homebrew
Homebrewは、Macのエコシステムで最も普及率が高いパッケージマネージャーです。Formulaは、開発に使うネイティブライブラリやコマンドを扱うためのものです。Caskは、Macのデスクトップで実行可能なアプリケーションを管理するためのものです。App Storeで扱うアプリケーションに関しては、Homebrewだけでは管理することができません。
Homebrewを使用するためには、公式ページの手順を参考にしてHomebrew本体をインストールする必要があります。インストール後、ターミナルに環境有効化の手順が出力されますので、それに従ってシェルのプロファイルを設定してください。シェルのプロファイルを設定した後は、ターミナルを再起動することで設定を反映することができます。
Homebrewのインストールが成功したかどうかを確認したい場合、brew doctorというコマンド実行すると、現在のシステム上のHomebrewの状態が健全か確認することができます。
バックアップ対象
~/Library/Application Support/obs-studio/~/.gnupg/