Uygulama katmanı şifrelemesi

Standart Payments API'leri, uygulama katmanı şifrelemesi için PGP veya JWE'yi destekler.

PGP şifrelemesi

PGP, kriptografik gizlilik ve kimlik doğrulama olanağı sunan standart bir şifreleme, şifre çözme ve imzalama algoritması grubudur.

Yükleri şifrelemek için PGP kullanırken iş ortakları şunları desteklemelidir:

  • Birden fazla PGP anahtarıyla yük şifreleme ve şifre çözme.
  • Yükleri birden fazla PGP anahtarıyla imzalama.
  • Birden çok imzaya sahip bir yükü doğrulama. Bunlardan herhangi biri Google tarafından sağlanan anahtarla imzalanabilir.
  • Web güvenli base64 kodlu yükleri çözme.

Google'a sağlanan PGP ortak anahtarlarının şifreleme için kullanılan bir alt anahtarı olmalıdır. Alt anahtar, ana anahtardan bağımsız rotasyona olanak tanır. Ana anahtar, kimlik doğrulama için kullanılır. Özel anahtarlar, en fazla iki yıl kullanım süresiyle bir yıl içinde süresi dolan 2.048 (veya daha büyük) RSA anahtarları olmalıdır.

Geliştirmeye başlamadan önce PGP anahtarlarını Google ile değiştirmeniz gerekir. Bu adımda bir PGP ortak-özel anahtar çifti oluşturur, ortak anahtarı Google'a sağlar ve Google'dan geri bir ortak anahtar alırsınız. Geliştirme sırasında yalnızca üretim dışında geliştirme ve test için kullanılan korumalı alan anahtarlarını değiştirmeniz gerekir. Üretim testi ve lansmanından önce yeni bir üretim anahtarı değişimi gerçekleştirmeniz gerekir.

Yeni PGP anahtarı oluşturma

Sistem yolunuzda bir GPG ikili programı olduğunu varsayarsak yeni bir anahtar çifti oluşturmak için aşağıdaki POSIX komutunu kullanabilirsiniz.

$ gpg --full-generate-key

İstendiğinde en az 2.048 bit entropi içeren ve süresi 1-2 yıl olan bir RSA anahtarı seçin. Bu komut hem bir ana anahtar (S 'igning ve'C 'ertificate oluşturma için SC olarak etiketlenir) hem de bir alt anahtar ("E 'ncryption" için E olarak etiketlenir) oluşturmalıdır.

PGP Kitaplık Yapılandırması

Yük Gönderme

  1. İmzalarken özet algoritması olarak SHA384 kullanılmalıdır; SHA1 veya MD5 kullanmayın
  2. Şifreleme yaparken simetrik şifreleme algoritması olarak AES256 kullanılmalıdır; CAST5 veya IDEA kullanmayın
  3. Mesajları şifrelerken veya imzalarken, karşılık gelen amaca sahip alt anahtarı seçtiğinizden emin olun. İmzalamak için CAN_SIGN anahtarını, şifrelemek için de ENCRYPT_COMMS/ENCRYPT_STORAGE anahtarını kullanın.

Yükleri Alma

  1. Bir yükü doğrularken kitaplığınızın SHA384 gibi modern karma algoritmalarını desteklediğinden emin olun. Google, 14 Mayıs 2023 tarihinden itibaren bu adı tüm yeni anahtarlarda kullanmaya başlayacak.
  2. Bir yükün şifresini çözerken kitaplığınızın AES256 gibi modern simetrik şifreleme algoritmalarını desteklediğinden emin olun. Google, 14 Mayıs 2023'ten itibaren bu yöntemi tüm yeni anahtarlarda kullanmaya başlayacak.

GPG Yük Şifreleme Örneği

Aşağıdaki komut, GPG kullanırken güvenli seçeneklerin nasıl belirlendiğine dair bir örnektir. Bu işlemin, kullanıcıların özel anahtarlara veya hassas giriş dosyalarına erişimi olmadığı güvenilir bir ortamda yapılması beklenir.

gpg --output signed-and-encrypted.pgp \
  --sign --digest-algo SHA384 \
  --encrypt --cipher-algo AES256 \
  --armor \
  --recipient {key_id} \
  input.txt

GPG, gerçekleştirmesini istediğiniz her işlem için paketten doğru anahtarı otomatik olarak seçer.

JWS imzalamasıyla JWE şifrelemesi

JSON Web Şifreleme (JWE), rfc7516 tarafından uygulama düzeyinde içerik şifrelemek için tanımlanan bir standarttır. JSON Web İmzası (JWS), rfc7515 tarafından uygulama düzeyinde içerik imzalamak için tanımlanan bir standarttır.

İstekler ve yanıtlar, "Kompakt Serileştirme" seçeneği ile asimetrik (ortak anahtar) şifrelemesi kullanılarak şifrelenmiş JWE jetonları olur. JWE jetonu, JWS jetonu olarak imzalanmış yükü içerir. JWS ayrıca asimetrik anahtarlar da kullanır. Bunlar imzalama için özel anahtar, doğrulama için ise ortak anahtardır.

Bir yük gönderirken öncelikle yükü imzalayın ve ardından şifreleyin. Bir yük alırken önce bunun şifresini çözün, ardından imzayı doğrulayın.

İş Ortakları, JWE'yi kullanırken aşağıdaki seçenekleri desteklemelidir:

  • Kompakt Serileştirme.
  • Birden fazla JWE anahtarından birinden yük şifresini çözme.
  • Anahtar yönetimi için RSA-OAEP, RSA-OAEP-256 veya ECDH-ES algoritması.
  • İçerik şifreleme için A256GCM, A128GCM, A128CBC-HS256 veya A256CBC-HS512 algoritması.
    • enc başlığı içine doldurulur.
  • kid üstbilgisi.
  • JWE şifrelemesi kullanan mesaj yükleri application/jose; charset=utf-8 içerik türünü kullanmalıdır.

İş Ortakları, JWS kullanırken aşağıdaki seçenekleri desteklemelidir:

  • Kompakt Serileştirme.
  • Birden fazla JWS anahtarının birinden yük doğrulanıyor.
  • İmza oluşturmak için HS256, HS384, HS512, RS256, RS384, RS512, ES256, PS256, PS384 veya PS512 algoritması.
  • kid üstbilgisini kullanın.

JWE/JWS dizeleri UTF-8 dizeleri olarak kodlanır ve yükleri rastgele baytlar olabilir.

Özel anahtarlar, maksimum iki yıl kullanım ömrüne sahip bir yıl içinde süresi dolan RSA/ECDH-ES anahtarları olmalıdır. Tüm özel anahtar kimlikleri her zaman iş ortağının sunucusunda kalmalı ve buna göre tüm imza değerleri iş ortağının sunucusunda hesaplanmalıdır.

Geliştirmeye başlamadan önce JWE ve JWS anahtarlarını Google ile değiştirmeniz gerekir. Anahtarlar, rfc7517'de tanımlandığı gibi JWK biçiminde değiştirilmelidir. Bu adımda bir herkese açık-özel anahtar çifti oluşturur, ortak anahtarı Google'a sağlar ve Google'dan bir ortak anahtar alırsınız. Geliştirme sırasında yalnızca üretim dışında geliştirme ve test için kullanılan korumalı alan anahtarlarını değiştirmeniz gerekir. Üretim testi ve lansmanından önce yeni bir üretim anahtarı değişimi gerçekleştirmeniz gerekir.