Uygulama katmanı şifrelemesi

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

PGP şifreleme

PGP, kriptografik gizlilik ve kimlik doğrulama sağlayan standart bir şifreleme, şifre çözme ve imzalama algoritmaları kümesidir.

Yükleri şifrelemek için PGP kullanılırken iş ortakları aşağıdakileri desteklemelidir:

  • Birden fazla PGP anahtarıyla yükleri şifreleme ve yüklerin şifresini çözme.
  • Yükleri birden fazla PGP anahtarıyla imzalama.
  • Birden fazla imzası olan bir yükü doğrulama. Bu imzaların herhangi biri, Google tarafından sağlanan anahtarla imzalanmış olabilir.
  • Web güvenli base64 kodlu yüklerin şifresini çözme.

Google'a sağlanan PGP ortak anahtarlarında şifreleme için kullanılan bir alt anahtar olmalıdır. Alt anahtar, birincil anahtardan bağımsız olarak döndürülebilir. Birincil anahtar, kimlik doğrulama için kullanılır. Özel anahtarlar, bir yıl içinde geçerliliğini yitiren ve maksimum iki yıl geçerli olan 2048 bit (veya daha büyük) RSA anahtarları olmalıdır.

Geliştirmeye başlamadan önce Google ile PGP anahtarlarını paylaşmanız gerekir. Bu adımda, bir PGP genel-özel anahtar çifti oluşturur, genel anahtarı Google'a gönderir ve Google'dan genel anahtarı geri alırsınız. Geliştirme sırasında, üretim dışında geliştirme ve test için kullanılan korumalı alan anahtarlarını değiştirmeniz yeterlidir. Üretim testi ve lansmandan önce üretim anahtarlarının başka bir değişimini yapmanız gerekir.

Yeni bir PGP anahtarı oluşturma

Sistem yolunuzda 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 entropiye sahip ve 1-2 yıl geçerliliği olan bir RSA anahtarı seçin. Bu komut hem birincil anahtar (imzalama ve sertifika oluşturma için "SC" olarak etiketlenir) hem de alt anahtar (şifreleme için "E" olarak etiketlenir) oluşturmalıdır.

Anahtar Rotasyonu

Anahtar rotasyonları sırasında kesintisiz hizmet sağlamak için sistem, hem iş ortakları hem de Google için birden fazla etkin PGP anahtarını destekler.

  • Yükleri, rotasyon sırasında hem eski hem de yeni anahtarlarla imzalayabilirsiniz. Google, imzayı aşağıdaki öğelere göre doğrular: Google'ın kayıtlarında bulunan etkin herkese açık anahtarlar.

  • Google ortak anahtarlarınızı döndürmeniz gerektiğinde hem eski hem de yeni Google ortak anahtarlarıyla yükleri şifreleyebilirsiniz. Google, her iki anahtarla da şifre çözebilir.

  • Mesajın kendisinde bulunan PGP anahtar kimlikleri, otomatik anahtar tanımlamayı mümkün kılar. Bu sayede, yük sürümü alanlarına veya koordineli geçiş sürelerine gerek kalmaz.

PGP Kitaplığı Yapılandırması

Yük Gönderme

  1. İmzalarken özet algoritması olarak SHA384 kullanmanız gerekir. SHA1 veya MD5 kullanmayın.
  2. Şifreleme yaparken simetrik şifreleme algoritması olarak AES256 kullanmanız gerekir. CAST5 veya IDEA kullanmayın.
  3. İletileri şifrelerken veya imzalarken ilgili amaca uygun alt anahtarı seçtiğinizden emin olun. İmzalama için CAN_SIGN anahtarını, şifreleme için ise ENCRYPT_COMMS/ENCRYPT_STORAGE anahtarını kullanın.

Yük 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'ten itibaren tüm yeni anahtarlarda bu yöntemi 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 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 belirleneceğine dair bir örnektir. Bu işlemin, kullanıcıların gizli anahtarlara veya hassas giriş dosyalarına erişemediği 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, her işlem için paketteki doğru anahtarı otomatik olarak seçer.

JWS imzalı JWE şifrelemesi

JSON Web Encryption (JWE), uygulama düzeyinde içeriği şifrelemek için rfc7516 tarafından tanımlanan bir standarttır. JSON Web Signature (JWS), uygulama düzeyinde içerik imzalamak için rfc7515 tarafından tanımlanan bir standarttır.

İstekler ve yanıtlar, "Compact Serialization" seçeneğiyle asimetrik (ortak anahtar) şifreleme kullanılarak şifrelenmiş JWE jetonları olacaktır. JWE jetonu, imzalı yükü JWS jetonu olarak içerecektir. JWS de asimetrik anahtarlar kullanır: imzalama için özel anahtar, doğrulama için ortak anahtar.

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

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

  • Compact Serialization.
  • Birden fazla JWE anahtarından birindeki yüklerin ş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 üstbilgisinde doldurulur.
  • Ortak şifreleme anahtarını tanımlamak için kid üstbilgisi.
  • JWE şifrelemesi kullanan ileti yükleri, içerik türü olarak application/jose; charset=utf-8 değerini kullanmalıdır.

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

  • Compact Serialization.
  • Birden fazla JWS anahtarından birindeki yükleri doğrulama.
  • İmza oluşturma için HS256, HS384, HS512, RS256, RS384, RS512, ES256, PS256, PS384 veya PS512 algoritması.
  • Özel imzalama anahtarını tanımlamak için kid üstbilgisi.

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

Özel anahtarlar, maksimum iki yıllık kullanım ömrüyle bir yıl içinde geçerliliğini yitirecek 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 Google ile JWE ve JWS anahtarlarını paylaşmanız gerekir. Anahtarlar, rfc7517'de tanımlandığı gibi JWK biçiminde değiştirilmelidir. Bu adımda, herkese açık ve özel anahtar çifti oluşturur, herkese açık anahtarı Google'a sağlar ve Google'dan herkese açık anahtarı geri alırsınız. Geliştirme sırasında, üretim dışında geliştirme ve test için kullanılan korumalı alan anahtarlarını değiştirmeniz yeterlidir. Üretim testi ve lansmandan önce üretim anahtarlarının başka bir değişimini yapmanız gerekir.