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
- İ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 ş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ı.
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:
- 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ı.
algbaşlığında (rfc 7518 bölüm 3.1) doldurulur.
- Ö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.