0

ממיר מפתחות JWK ⇄ PEM

המר מפתחות הצפנה בין פורמט JWK ו-PEM באמצעות ממשק ה-Web Crypto API, פענוח אלגוריתם/עקומה/גודל וחשב את טביעת האגודל של RFC 7638 JWK.

Buy Me a Coffee at ko-fi.com
מעבד... 0%
מפתח ניתוח
המרת פורמט
טביעת אגודל מחשוב
בוצע

תוצאה

מפתחות JSON Web (JWK) ומפתחות מקודדי PEM מופיעים להחלפה בספריות JWT, כלי TLS ותצורת OAuth/OIDC, אך המרה בין השניים ביד פירושה מבני DER לפיענוח base64 או עיצוב מחדש של JSON - קל לטעות בעדינות. כלי זה מבצע את ההמרה עם ה-Web Crypto API האמיתי של הדפדפן במקום מניפולציה של טקסט: בלוק PEM מודבק מיובא עם crypto.subtle.importKey('spki'|'pkcs8', ...) ומיוצא מחדש כ-JWK עם exportKey('jwk', ...); JWK מודבק מיובא עם importKey('jwk', ...) ומיוצא מחדש כ-SPKI או PKCS8 DER, ולאחר מכן עטוף בכותרת PEM הנכונה. מכיוון שהדפדפן עצמו מאמת ומפענח את חומר המפתח, מפתח שגוי או בחירת אלגוריתם לא תואם נכשלים בקול רם במקום לייצר זבל בשקט.

האלגוריתמים הנתמכים הם RSA (RSASSA-PKCS1-v1_5), EC על עקומות P-256/P-384/P-521, ו- היכן שהדפדפן מיישם אותם - Ed25519 ו-X25519. תמיכת הדפדפן ב-Ed25519/X25519 ב-Web Crypto עדיין לא עקבית בין המנועים, כך שבמקום לנחש ממחרוזת סוכן המשתמש, הכלי מריץ בדיקה crypto.subtle.generateKey() בפועל עבור העקומה שנבחרה ואומר לך בצורה ברורה אם היא לא נתמכת כאן, במקום להחזיר תוצאה מפוברקת.

כל המרה מפענחת גם את המטא-נתונים האמיתיים של המפתח: עבור מפתחות RSA, אורך סיביות מודולוס ואלגוריתם הגיבוב היישר מאובייקט CryptoKey; עבור מקשי EC ו-OKP, העקומה בעלת השם; ולכל מפתח, טביעת האגודל של RFC 7638 JWK - קוד SHA-256 של החברים הנדרשים של JWK מסודרים בסדר לקסיקוגרפי קפדני (e/kty/n עבור RSA, crv/kty/x/y עבור EC, crv/kty/x עבור OKP/Ed25519/X25519/X25). טביעת אצבע זו היא מה שמערכות רבות משתמשות בו כמזהה "ילד" של מפתח, וביצוע שגוי בסדר החבר מייצר חשיש שונה לחלוטין, וזה בדיוק סוג הטעות שיישום מגולגל ידני נוטה לה.

מכיוון שהכל רץ דרך crypto.subtle בלשונית הדפדפן שלך, חומר מפתח פרטי לעולם לא עוזב את המכשיר שלך - אין שרת, אין העלאה ואין קריאת API חיצונית מעורבת בשום שלב בהמרה.