🪪Principal
Internet Computerには、Principalという識別子があります。
Principalによって、Canisterを呼び出したユーザーや別のCanisterを識別することができます。
Principalはユーザーの公開鍵(または秘密鍵)から導出されますが、どのように組み立てられているかアルゴリズムの解説サイトがありましたので、実際に検証してみることにします。
参照元情報
https://5n2bt-lqaaa-aaaae-aajfa-cai.raw.icp0.io/
We convert a DER public key to a principal IDs by computing its SHA224 hash then appending the byte 02, indicating a self-authenticating ID in Internet Computer parlance. Like other principal IDs, we can cook self-authenticating IDs by prepending a CRC32 checksum, encoding with base32, and inserting dashes. Some tools expect these
Principalの導出
dfxコマンドを使っている方であれば、defaultのIdentityが以下に格納されているかと思います。
自分のテスト環境では、以下のPrincipalでしたので、この値を 秘密鍵 → 公開鍵 → Principal という流れで求めてみることにします。
(1) 秘密鍵(PEM形式)から公開鍵(DER形式)を出力
バイナリですので、中身を確認したい場合は| hexdump -C
のようにパイプでつなげるとよいでしょう。
(2) sha224sum
公開鍵(DER形式)のsha224ハッシュを求めます。
(3) 末尾に'02'追加 (Principal ID raw)
末尾に付与するbyteは以下のようです。
0x01
canister
0x02
public key (self-authenticating ID)
0x04
anonymous
(4) CRC32計算
Principal ID (raw)のCRC32を計算します。
(5) 先頭にCRC32を追加してBase32
CRC32値 (8a4b53f
)をPrincipal ID (raw)の先頭に追加した値をBase32エンコードします。
(6) 小文字化して、5桁ずつ区切る
Base32エンコード値を見やすいように整形します。
Principal導出スクリプト
上記の内容をまとめたスクリプトを用意してみました。
使用方法
あくまでも学習目的で用意したものにすぎませんので内容は保証しません。
実際の運用では、公式のdfx identity get-principal
コマンドなどをお使いください。
最終更新