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 sağlar 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 lansmanından önce üretim anahtarlarını tekrar değiştirmeniz 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 entropi içeren ve 1-2 yıl geçerliliği olan bir RSA anahtarı seçin. Bu komut hem birincil anahtar (SC olarak etiketlenir, "S"ignature ve "C"ertificate generation) hem de alt anahtar (E olarak etiketlenir, "E"ncryption) oluşturmalıdır.

Anahtar Rotasyonu

Anahtar döndürme işlemleri 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ı için yükleri şifreleyebilirsiniz. Google, her iki anahtarla da şifre çözme işlemi yapabilir.

  • 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 bu özelliği 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, gerçekleştirmesini istediğiniz her işlem için paketteki doğru anahtarı otomatik olarak seçer.

JWS imzalama ile JWE şifreleme

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 (açık anahtar) şifreleme kullanılarak şifrelenen JWE jetonlarıdır. JWE jetonu, imzalı yükü JWS jetonu olarak içerir. JWS de asimetrik anahtarlar kullanır. İmzalama için özel anahtar, doğrulama için ortak anahtar kullanılır.

Bir yük gönderirken önce yükü imzalayın, ardından şifreleyin. Bir 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:

  • Kompakt Serileştirme.
  • Birden fazla JWS anahtarından birinden gelen 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 gönderir 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 lansmanından önce üretim anahtarlarını tekrar değiştirmeniz gerekir.