Macaroons
https://docs.lightning.engineering/the-lightning-network/l402/macaroons
マカロンは、分散システム向けの高度な認証メカニズムである。マカロンは、ベアラ認証システムとIDベースの認証システムの利点を1つのトークンに統合したもので、中央データベースへのアクセスを必要とせず、迅速に発行・検証できるように設計されている。
https://research.google/pubs/pub41892/
クッキーは、通常、一意の識別子を含むデータです。クッキーは、ユーザーがページを閲覧した際にブラウザに保存される。ベアラ資産として、クッキーの純粋な存在はユーザーを認証します。
一見したところ、マカロンはクッキーに似た無記名資産です。クッキーとは異なり、それは発行者によって暗号的に検証されるか、発行者が他の誰かに検証を委任することができます。これにより、分散システムは中央データベースにアクセスすることなくユーザを検証することが可能になる。例えばAPIエンドポイントは、アクセスを許可する前に中央のユーザーデータベースでクッキーを検索する必要がなくなる。その代わりに、マカロンを検証するためのルート・キーが必要になるだけで、ソフトウェア・アーキテクチャがより弾力的で効率的かつ安全になる。
マカロンは独自のパーミッションを含むことができる。マカロンが提示されると、APIエンドポイントはこれらのパーミッションを読み取り、マカロンを検証し、それに従ってリクエストを実行する。
さらに、マカロンはユーザー自身が制限を加えることができる。これにより、安全な方法で権限と機能を委譲することができます。
今日、マカロンはLightning Labsの製品で幅広く使用されている。マカロンは、Lightning Networkの支払いによって得られる事前イメージとともに、L402の基礎を形成しており、Lightning PoolとLightning Loopでユーザー認証に使用されている。
クッキーやユーザーベースの認証と比較した場合のマカロンの主な欠点は、特に分散システムにおいて、マカロンの失効が難しいことです。マカロンを失効させるには、対応するルートキーを削除する必要があり、そのキーで署名された他のマカロンもすべて無効になる。
マカロンの失効を容易にするため、マカロンの一部として32バイトのユーザー識別子を埋め込むことを推奨する。マカロンが失効すると、ユーザー識別子は無効とみなされ、新しいユーザー識別子が発行されます。
マカロンの造幣方法
最も基本的なレベルでは、私たちだけが知っている秘密鍵を使って HMAC で署名することで、クッキー (id12345678id) を純粋にマカロンに変えることができます。これはすでに、HMAC が私たちの秘密鍵で正しく署名されているかどうかを検証することだ けで、マカロンを検証することを可能にしています。
id12345678id
HMAC(secret;4c4ab7a4f7a9)
より一般的には、クッキーの他に、例えばapi.domain.comのようなロケーションと、お客様のマカロンのような一般に見える識別子を設定します。
id12345678id,api.domain.com,your macaroon
HMAC(secret,4c4ab7a4f7a9,api.domain.com,your macaroon)
マカロンをさらに修正したり制限したりするために、マカロンのさらなる制限や属性である「caveat」を追加する。既存の注意書きの下の行を修正し、HMAC関数の出力を別のHMAC関数のキーとして使用する。これは、マカロンの所有者であれば誰でもできる。
id12345678id,api.domain.com,your macaroon
expires:2023-12-31
HMAC(HMAC(secret,4c4ab7a4f7a9,api.domain.com,your macaroon)expires:2023-12-31)
これで、最終的なHMACだけでなく、注意書きを含む各行をマカロンに含めるだけでよくなった。マカロンを検証するサービスは、適切なHMACを一行ずつ計算し、最終的な値が ユーザーから提供された値と一致すること、つまりマカロンが有効であること、 そしてどの注意書きを適用するかを確認できるようになった。リクエストがマカ ルーンに適合しているかどうかは、別途チェックする必要がある。
このような注意書きの連鎖は、ほとんど無限に拡張できる。
ライトニングループ・マカルーンの例:
identifier:
version = 0
user_id = fed74b3ef24820f440601eff5bfb42bef4d615c4948cec8aca3cb15bd23f1013
payment_hash = 163102a9c88fa4ec9ac9937b6f070bc3e27249a81ad7a05f398ac5d7d16f7bea
caveats:
services = lightning_loop:0
lightning_loop_capabilities = loop_out,loop_in
loop_out_monthly_volume_sats = 200000000
権限の委譲
マカロンは権限の委譲に使用できる。例えば、Loopはマカロンを取引所に発行することができ、取引所はエンドユーザーにマカロンを渡す前に、さらに制限を加えることができる。
サードパーティの警告
マカロンには、サードパーティの注意書きを含めることもできます。サードパーティと何らかのやり取りを行い、マカロンを完成させるための追加シークレットを取得する必要があります。Lightning API Credentials (L402s) はこのような注意事項の一種であり、Lightning Networkの請求書を支払うことで初めてマカロンが完成する。