PGP şifreleme
PGP, kriptografik gizlilik ve kimlik doğrulama sağlayan standart bir şifreleme, şifre çözme ve imzalama algoritmaları kümesidir.
PGP'yi kullanarak yükleri şifrelerken iş ortakları şunları 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 imzalardan 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ği dolan ve maksimum iki yıl geçerlilik süresine sahip 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 herkese açık/ö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 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 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.
PGP Kitaplığı Yapılandırması
Yük Gönderme
- İmzalarken özet algoritması olarak
SHA384kullanmanız gerekir.SHA1veyaMD5kullanmayın. - Şifreleme yaparken simetrik şifreleme algoritması olarak
AES256kullanmanız gerekir.CAST5veyaIDEAkullanmayın. - İletileri şifrelerken veya imzalarken ilgili amaca uygun alt anahtarı seçtiğinizden emin olun. İmzalama için
CAN_SIGNanahtarını, şifreleme için iseENCRYPT_COMMS/ENCRYPT_STORAGEanahtarını kullanın.
Yük Alma
- Bir yükü doğrularken kitaplığınızın
SHA384gibi 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. - Bir yükün şifresini çözerken kitaplığınızın
AES256gibi 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 şifrelemesi
JSON Web Encryption (JWE), içerikleri uygulama düzeyinde şifrelemek için rfc7516 tarafından tanımlanan bir standarttır. JSON Web Signature (JWS), içerikleri uygulama düzeyinde 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 şifrelenmiş JWE jetonlarıdır. JWE jetonu, imzalı yükü JWS jetonu olarak içerir. JWS'de de asimetrik anahtarlar kullanılı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ı.
algbaşlığında doldurulur (rfc7518 bölüm 4.1).
- İç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ı.
algbaşlığında doldurulur (rfc 7518 bölüm 3.1).
- Ö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, en fazla 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/ö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 lansmandan önce üretim anahtarlarının başka bir değişimini yapmanız gerekir.