رمزگذاری PGP
PGP مجموعه ای استاندارد از الگوریتم های رمزگذاری، رمزگشایی و امضا است که حریم خصوصی رمزنگاری و احراز هویت را فراهم می کند.
هنگام استفاده از PGP برای رمزگذاری بارهای پرداختی، شرکا باید از موارد زیر پشتیبانی کنند:
- رمزگذاری و رمزگشایی محموله ها با چندین کلید PGP.
- امضای محموله ها با چندین کلید PGP.
- تأیید یک محموله با چندین امضا، که هر یک از آنها می تواند امضا با کلید ارائه شده توسط Google باشد.
- رمزگشایی محمولههای کدگذاری شده مبتنی بر وب ایمن 64.
کلیدهای عمومی PGP ارائه شده به Google باید دارای یک کلید فرعی برای رمزگذاری باشند. کلید فرعی امکان چرخش مستقل از کلید اصلی را فراهم می کند. کلید اصلی برای تأیید هویت استفاده می شود. کلیدهای خصوصی باید کلیدهای RSA 2048 بیتی (یا بیشتر) باشند که در یک سال با حداکثر دو سال عمر منقضی می شوند.
قبل از شروع توسعه، باید کلیدهای PGP را با Google مبادله کنید. در این مرحله، شما یک جفت کلید عمومی-خصوصی PGP ایجاد میکنید، کلید عمومی را در اختیار Google قرار میدهید و یک کلید عمومی را از Google پس میگیرید. در طول توسعه، شما فقط باید کلیدهای جعبه ایمنی مورد استفاده برای توسعه و آزمایش خارج از تولید را مبادله کنید. قبل از تست تولید و راه اندازی، باید کلیدهای تولید دیگری را تعویض کنید.
ایجاد یک کلید PGP جدید
با فرض اینکه یک باینری GPG در مسیر سیستم خود دارید، می توانید از دستور POSIX زیر برای ایجاد یک جفت کلید جدید استفاده کنید.
$ gpg --full-generate-key
هنگامی که از شما خواسته شد، یک کلید RSA با حداقل 2048 بیت آنتروپی و انقضای 1-2 سال انتخاب کنید. این دستور باید هم یک کلید اصلی (با برچسب SC، برای 'S'igning و 'C'ertificate' تولید) و هم یک کلید فرعی (با برچسب E، برای 'E'ncryption) ایجاد کند.
پیکربندی کتابخانه PGP
ارسال محموله ها
- هنگام امضا، باید از
SHA384
به عنوان الگوریتم خلاصه استفاده کنید. ازSHA1
یاMD5
استفاده نکنید - هنگام رمزگذاری، باید از
AES256
به عنوان الگوریتم رمزگذاری متقارن استفاده کنید. ازCAST5
یاIDEA
استفاده نکنید - هنگام رمزگذاری یا امضای پیام ها، حتماً کلید فرعی را با هدف مربوطه انتخاب کنید. از کلید
CAN_SIGN
برای امضا و از کلیدENCRYPT_COMMS
/ENCRYPT_STORAGE
برای رمزگذاری استفاده کنید
دریافت محموله ها
- هنگام تأیید یک بار، مطمئن شوید که کتابخانه شما از الگوریتمهای هش مدرن مانند
SHA384
پشتیبانی میکند. گوگل از 14 مه 2023 استفاده از آن را در همه کلیدهای جدید آغاز خواهد کرد. - هنگام رمزگشایی یک بار، مطمئن شوید که کتابخانه شما از الگوریتم های رمزگذاری متقارن مدرن مانند
AES256
پشتیبانی می کند. گوگل از 14 مه 2023 استفاده از آن را در همه کلیدهای جدید آغاز خواهد کرد.
مثال رمزگذاری GPG Payload
دستور زیر نمونه ای از نحوه انتخاب گزینه های امن هنگام استفاده از GPG است. انتظار می رود که این عملیات در یک محیط قابل اعتماد انجام شود که در آن افراد به کلیدهای خصوصی یا فایل های ورودی حساس دسترسی ندارند.
gpg --output signed-and-encrypted.pgp \
--sign --digest-algo SHA384 \
--encrypt --cipher-algo AES256 \
--armor \
--recipient {key_id} \
input.txt
GPG برای هر عملیاتی که از آن بخواهید به طور خودکار کلید مناسب را از بسته انتخاب کند.
رمزگذاری JWE با امضای JWS
JSON Web Encryption (JWE) استانداردی است که توسط rfc7516 برای رمزگذاری محتوا در سطح برنامه تعریف شده است. JSON Web Signature (JWS) استانداردی است که توسط rfc7515 برای امضای محتوا در سطح برنامه تعریف شده است.
درخواستها و پاسخها، توکنهای JWE هستند که با استفاده از رمزگذاری نامتقارن (کلید عمومی) با گزینه «Serialization Compact» رمزگذاری شدهاند. توکن JWE حاوی محموله امضا شده به عنوان یک توکن JWS خواهد بود. JWS همچنین از کلیدهای نامتقارن استفاده می کند. کلید خصوصی برای امضا و کلید عمومی برای تأیید.
هنگام ارسال محموله، ابتدا محموله را امضا کرده و سپس آن را رمزگذاری کنید. هنگام دریافت محموله، ابتدا آن را رمزگشایی کنید و سپس امضا را تأیید کنید.
هنگام استفاده از JWE، شرکا باید گزینه های زیر را پشتیبانی کنند:
- سریال سازی فشرده
- رمزگشایی محموله ها از یکی از چندین کلید JWE.
- الگوریتم RSA-OAEP، RSA-OAEP-256، یا ECDH-ES برای مدیریت کلید.
- در هدر
alg
جمع شده است ( rfc7518 بخش 4.1 ).
- در هدر
- الگوریتم A256GCM ، A128GCM ، A128CBC-HS256 ، یا A256CBC-HS512 برای رمزگذاری محتوا.
- در هدر
enc
پر شده است.
- در هدر
- هدر
kid
برای شناسایی کلید رمزگذاری عمومی. - محمولههای پیامی که از رمزگذاری JWE استفاده میکنند باید از نوع محتوا application/jose استفاده کنند. charset=utf-8.
هنگام استفاده از JWS، شرکا باید گزینه های زیر را پشتیبانی کنند:
- سریال سازی فشرده
- تأیید محموله ها از یکی از چندین کلید JWS.
- الگوریتم HS256، HS384، HS512، RS256، RS384، RS512، ES256، PS256، PS384 یا PS512 برای ایجاد امضا.
- در هدر
alg
جمع شده است ( rfc 7518 بخش 3.1 ).
- در هدر
- هدر
kid
برای شناسایی کلید امضای خصوصی.
رشتههای JWE/JWS بهعنوان رشتههای UTF-8 کدگذاری میشوند و بارگذاریهای آنها ممکن است بایت دلخواه باشد.
کلیدهای خصوصی باید کلیدهای RSA/ECDH-ES باشند که در یک سال با حداکثر طول عمر دو سال منقضی میشوند. همه هویت های کلید خصوصی باید همیشه در سرور شریک باقی بماند و بر این اساس، تمام مقادیر امضا باید در سرور شریک محاسبه شود.
قبل از شروع توسعه، باید کلیدهای JWE و JWS را با Google مبادله کنید. کلیدها باید در قالب JWK، همانطور که در rfc7517 تعریف شده است، مبادله شوند. در این مرحله، یک جفت کلید عمومی-خصوصی ایجاد میکنید، کلید عمومی را در اختیار Google قرار میدهید و یک کلید عمومی را از گوگل پس میگیرید. در طول توسعه، شما فقط باید کلیدهای جعبه ایمنی مورد استفاده برای توسعه و آزمایش خارج از تولید را مبادله کنید. قبل از تست تولید و راه اندازی، باید کلیدهای تولید دیگری را تعویض کنید.