PGP şifreleme
PGP, kriptografik gizlilik ve kimlik doğrulama sağlayan standart bir şifreleme, şifre çözme ve imzalama algoritma grubudur.
İş ortakları, yük verisini şifrelemek için PGP kullanırken aşağıdakileri desteklemelidir:
- Birden fazla PGP anahtarıyla yüklerin şifrelenmesi ve şifresi çözülmesi.
- Yüklemeleri birden fazla PGP anahtarıyla imzalama.
- Birden fazla imzayla bir yükü doğrulama. Bu imzalar arasında Google tarafından sağlanan anahtarla oluşturulan imza da bulunabilir.
- Web'de güvenli base64 kodlu yüklerin şifresini çözme.
Google'a sağlanan PGP genel anahtarlarında şifreleme için kullanılan bir alt anahtar olmalıdır. Alt anahtar, ana anahtardan bağımsız olarak döndürülebilir. Ana anahtar, kimlik doğrulama için kullanılır. Gizli anahtarlar, maksimum kullanım süresi iki yıl olan ve bir yıl içinde geçerliliği sona eren 2048 (veya daha yüksek) bit RSA anahtarları olmalıdır.
Geliştirmeye başlamadan önce Google ile PGP anahtarı değiş tokuşu yapmanız gerekir. Bu adımda, bir PGP herkese açık/özel anahtar çifti oluşturur, genel anahtarı Google'a gönderir ve Google'dan bir genel anahtar alırsınız. Geliştirme sırasında, yalnızca geliştirme ve test için kullanılan korumalı alan anahtarlarını üretim dışında değiştirmeniz gerekir. Üretim testinden ve lansmandan önce başka bir üretim anahtarı değişimi yapmanız gerekir.
Yeni bir PGP anahtarı oluşturma
Sistem yolunızda bir GPG ikili dosyası olduğunu varsayarak 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 ve 1-2 yıllık geçerlilik süresi olan bir RSA anahtarı seçin. Bu komut hem bir ana anahtar ('O'turum açma ve 'S'ertifika oluşturma için SC olarak etiketlenir) hem de bir alt anahtar ('Ş'ifreleme için E olarak etiketlenir) oluşturur.
PGP Kitaplığı Yapılandırması
Yük Gönderme
- İmzalama işleminde özet algoritması olarak
SHA384
kullanmalısınız.SHA1
veyaMD5
kullanmayınız. - Şifreleme yaparken simetrik şifreleme algoritması olarak
AES256
'ü kullanmalısınız;CAST5
veyaIDEA
kullanmamalısınız. - Mesajları şifreler veya imzalarken, ilgili amaca sahip alt anahtarı seçtiğinizden emin olun; imzalama için
CAN_SIGN
anahtarını, şifreleme içinENCRYPT_COMMS
/ENCRYPT_STORAGE
anahtarını kullanın.
Yük alma
- Bir yük doğrularken kitaplığınızın
SHA384
gibi modern karma algoritmaları desteklediğinden emin olun. Google, 14 Mayıs 2023'ten itibaren tüm yeni anahtarlarda bu anahtarı kullanmaya başlayacaktır. - 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ılırken güvenli seçeneklerin nasıl seçileceğini gösteren 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 paketten otomatik olarak doğru anahtarı seçer.
JWS imzalama ile JWE şifreleme
JSON Web Encryption (JWE), içeriği uygulama düzeyinde şifrelemek için rfc7516 tarafından tanımlanan bir standarttır. JSON Web Signature (JWS), içeriği uygulama düzeyinde imzalamak için rfc7515 tarafından tanımlanan bir standarttır.
İstekler ve yanıtlar, "Kompakt Serileştirme" seçeneğiyle asimetrik (herkese açık anahtar) şifreleme kullanılarak şifrelenmiş JWE jetonları olacaktı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ıp ardından şifreleyin. Bir yük aldığında önce şifresini çöz, ardından imzayı doğrula.
İş ortakları, JWE'yi kullanırken aşağıdaki seçenekleri desteklemelidir:
- Kompakt Serileştirme.
- Birden fazla JWE anahtarından birinde bulunan yüklerin şifresini çözme.
- Anahtar yönetimi için RSA-OAEP, RSA-OAEP-256 veya ECDH-ES algoritması.
alg
başlığında doldurulur (rfc7518 bölüm 4.1).
- İçerik şifreleme için A256GCM,
A128GCM,
A128CBC-HS256 veya
A256CBC-HS512 algoritması.
enc
üstbilgisinde doldurulur.
kid
başlığını kullanarak ortak şifreleme anahtarını tanımlayabilirsiniz.- JWE şifrelemesi kullanan mesaj yükü, application/jose; charset=utf-8 içerik türünü kullanmalıdır.
İş ortakları, JWS'yi kullanırken aşağıdaki seçenekleri desteklemelidir:
- Kompakt Serileştirme.
- Birden fazla JWS anahtarından gelen yüklerin doğrulanması.
- İmza oluşturmak için HS256, HS384, HS512, RS256, RS384, RS512, ES256, PS256, PS384 veya PS512 algoritması.
alg
başlığında doldurulur (rfc 7518 bölüm 3.1).
kid
üstbilgisini kullanarak özel imzalama anahtarını tanımlayabilirsiniz.
JWE/JWS dizeleri UTF-8 dizesi olarak kodlanır ve bunların yük verileri rastgele baytlar olabilir.
Özel anahtarlar, en fazla iki yıllık bir kullanım ömrü olan ve bir yıl içinde geçerlilik süresi dolan RSA/ECDH-ES anahtarları olmalıdır. Tüm özel anahtar kimlikleri her zaman iş ortağının sunucusunda kalmalıdır 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ş tokuş etmeniz gerekir. Anahtarlar, rfc7517'de tanımlandığı şekilde JWK biçiminde değiştirilmelidir. Bu adımda, bir herkese açık-özel anahtar çifti oluşturur, herkese açık anahtarı Google'a sağlar ve Google'dan bir herkese açık anahtar alırsınız. Geliştirme sırasında, yalnızca geliştirme ve test için kullanılan korumalı alan anahtarlarını üretim dışında değiştirmeniz gerekir. Üretim testinden ve lansmandan önce başka bir üretim anahtarı değişimi yapmanız gerekir.