بررسی کارت
کسی به شما کارتی داده است: چند یادداشت که خودش خواسته به شما نشان دهد، با امضای خودش. این صفحه بررسی میکند که کارت از وقت امضا تغییری نکرده، هنوز در تاریخ اعتبارش است، و کدام یادداشتها را سازمانی با کلیدی که روی دامنهی خودش منتشر کرده تأیید کرده است.
هر کسی میتواند امضای یک کارت را در مرورگر خودش بررسی کند.
یادداشتی روی کارت میتواند ثابت کند پیش از یک دیدار در دفتر بوده، با گواهی همان کسی که دیده شده. نه ساعتی که باید به آن اعتماد کرد، نه سروری.
ترتیب را ثابت میکند، نه ساعت را؛ و هر گواه به اندازهی اعتماد شما به کلیدش ارزش دارد.
یک نمونه را امتحان کنید
نمونهها با کلیدهای آزمایشی و یادداشتهای ساختگی امضا شدهاند.
نمونهها از همین سایت بار میشوند. اگر دیده نشدند، باز هم میتوانید کارتی را پایین بچسبانید.
میتوانید فایل را روی همین کادر هم رها کنید.
این صفحه چه چیزی را میگیرد، و چه چیزی را هرگز نمیفرستد
- کارت همینجا، در مرورگر شما، بررسی میشود و هرگز بارگذاری نمیشود. پشت این صفحه سروری نیست که آن را دریافت کند.
- برای نشان دادن نمونهها، فایل
samples.jsonرا از همین سایت میگیرد. - وقتی کارتی میگوید سازمانی یادداشتی را تأیید کرده، این صفحه فایل کلید آن سازمان را میگیرد:
https://<domain>/.well-known/3p-keys.json. همین درخواست، با نشانی IP شما و زمانش، به آن دامنه خبر میدهد که کسی دارد کارتی را که آن دامنه تأیید کرده بررسی میکند. چیزی از خود کارت همراهش نمیرود. اگر آن فایل در دسترس نباشد، یادداشت «بررسینشده» نشان داده میشود و هرگز «تأییدشده». - نامهایی که برای یک کلید ذخیره میکنید، فقط در همین مرورگر میمانند.
بررسی چطور انجام میشود
گامها را نوشتهایم تا بتوانید کارت را با کد خودتان هم بررسی کنید. هر کارت کلید عمومیاش را با خودش دارد، پس به هیچ فهرست مرکزیای نیاز نیست. فقط امضای تأیید به گرفتن فایلی از دامنهی خود آن سازمان نیاز دارد.
- اگر هر کلیدی، در هر عمقی، نام یکی از فیلدهایی را در خود داشته باشد که هرگز از دفتر خود آدم بیرون نمیروند (
delta،declared_vs_lived،declared_graph،lived_graph،divergence،self_deception،band_mismatch)، کارت رد میشود؛ با هر بزرگی و کوچکی حروف، هر جداکننده، حروف تمامعرض یا حروف همشکل. proof.sigرا بردارید. باقی را به شکل استاندارد بنویسید: کلیدهای هر شیء به ترتیب واحدهای UTF-16، بیفاصلهی اضافه، با UTF-8. عددها باید صحیح و در بازهی امن باشند؛ عدد اعشاری یا صحیحِ بزرگتر استاندارد نیست و کارت رد میشود.- امضا را روی همین بایتها با
proof.key(یک JWK عمومی) بسنجید:ECDSA / P-256 / SHA-256، امضا به شکل خامr‖sدر base64url. - اگر
identityنباشد:subjectباید همان اثر انگشت RFC 7638 کلیدproof.keyباشد. اگر باشد: سند3p.identity/1باید با کلید آغازینش امضا شده باشد و اثر انگشت آن کلید همانsubjectباشد. هر گزاره در زنجیره پشت سر قبلی میآید (seqیکی بیشتر،prevهمان کلیدی که جایگزین میشود) و کلید تازه آن را میپذیرد. چرخش کلید را کلید قبلی امضا میکند؛ بازیابی را کلیدهای بازیابیای که از آغاز نام برده شدهاند، و این کلیدها هرگز کارت امضا نمیکنند. کلیدِ کارت باید در تاریخissuedاز آنِ این هویت باشد و از کلیدهایی نباشد که از آن پس لو رفته اعلام شدهاند. - اگر
expiresآمده باشد، باید هنوز نرسیده باشد. کارتی که تاریخ انقضا ندارد، «بیانقضا» نشان داده میشود. - یادداشتی تأییدشده به حساب میآید که گواهیاش یک
3p.countersign/1داشته باشد که امضای خودش درست باشد؛ofآن صاحب همین کارت و SHA-256 شکل استاندارد همان یادداشت (بی گواهیهایش) را نام ببرد؛ وby.domainآن، فایل3p.domain-keys/1را درhttps://<domain>/.well-known/3p-keys.jsonبرای دقیقاً همان دامنه ارائه کند. آن فایل باید کلید را زیرby.kid(جاری یا بازنشسته، نه باطلشده) برای کارcountersignو معتبر در تاریخ امضای تأیید فهرست کرده باشد. برچسب تنها هیچ ارزشی ندارد. اگر فایل گرفته نشد، همین را بگویید: یادداشت تأیید نشده است. - «آنچه حالا مهم است» (
3p.salience/1) فقط وقتی از امروز میگوید که با کلید جاری هویت امضا شده باشد. تاریخ کهنهشدنش جداست و ربطی به انقضای کارت ندارد. - کارت مشترک (
3p.composite/1): هر یادداشت مشترک فقط با دو امضای همزمانِ درست یا بیشتر ثابت میشود، هر کدام روی صاحب کارت مشترک و همان یادداشت. - یادداشتی که زیر
written_beforeآمده ثابت میکند متنش پیش از آنکه کس دیگری دفتر را ببیند در آن بوده است:canon({salt, text})را هش کنید، ازbeforeتا آخرpathزنجیر کنید (هر گام SHA-256 حلقهی قبلی و هش بعدی، بهصورت هگز)، و نتیجه باید همانheadی باشد که یک3p.witness/1درseqخودش، برای همین کارت، با کلیدی غیر از کلید صاحب کارت امضا کرده است. ترتیب را ثابت میکند، نه ساعت را؛ و هر گواه به اندازهی اعتماد شما به کلیدش ارزش دارد.
امضای درست نشان میدهد کارت با همین کلید امضا شده و از آن پس تغییری نکرده است. نشان نمیدهد کلید دست چه کسی است، و نشان نمیدهد یادداشتها راستاند. فقط امضای تأیید، یادداشتی را از حد «حرف خود آدم» بالاتر میبرد.