3.1. Genel bakış
PQXDH üç aşamadan oluşur:
- Bob, eliptik eğri kimlik anahtarını, eliptik eğri ön anahtarlarını ve pqkem ön anahtarlarını bir sunucuya yayımlar.
- Alice, sunucudan bir "ön anahtar paketi" alır ve bunu Bob'a ilk iletiyi göndermek için kullanır.
- Bob, Alice'in ilk iletisini alır ve işler.
Aşağıdaki bölümlerde bu aşamalar açıklanmaktadır.
3.2. Anahtarların yayımlanması
Bob, 64 baytlık rastgele değerlerden oluşan Z_SPK, Z_PQSPK, Z1, Z2, ... dizisi üretir ve aşağıdakileri içeren bir anahtar kümesini sunucuya yayımlar:
- Bob'un curve kimlik anahtarı IK_B
- Bob'un imzalı curve ön anahtarı ve tanımlayıcısı (SPK_B, IdEC(SPK_B))
- Bob'un curve ön anahtarı üzerindeki imzası Sig(IK_B, EncodeEC(SPK_B), Z_SPK)
- Bob'un imzalı son çare pqkem ön anahtarı ve tanımlayıcısı (PQSPK_B, IdKEM(PQSPK_B))
- Bob'un pqkem ön anahtarı üzerindeki imzası Sig(IK_B, EncodeKEM(PQSPK_B), Z_PQSPK)
- Bob'un tek kullanımlık curve ön anahtarlarından oluşan bir küme (OPK_B1, OPK_B2, OPK_B3, ...) ve bunların tanımlayıcıları (IdEC(OPK_B1), IdEC(OPK_B2), IdEC(OPK_B3), ...)
- Bob'un imzalı tek kullanımlık pqkem ön anahtarlarından oluşan bir küme (PQOPK_B1, PQOPK_B2, PQOPK_B3, ...) ve bunların tanımlayıcıları (IdKEM(PQOPK_B1), IdKEM(PQOPK_B2), IdKEM(PQOPK_B3), ...)
- Bob'un imzalı tek kullanımlık pqkem ön anahtarları üzerindeki imzalarından oluşan küme (Sig(IK_B, EncodeKEM(PQOPK_B1), Z1), Sig(IK_B, EncodeKEM(PQOPK_B2), Z2), Sig(IK_B, EncodeKEM(PQOPK_B3), Z3), ...)
Bob'un kimlik anahtarını sunucuya yalnızca bir kez yüklemesi gerekir. Ancak Bob, başka zamanlarda da yeni tek kullanımlık ön anahtarlar yükleyebilir (örneğin, sunucu Bob'a sunucudaki tek kullanımlık ön anahtar stoğunun azaldığını bildirdiğinde).
Hem imzalı curve ön anahtar hem de imzalı son çare pqkem ön anahtarı için Bob, belirli aralıklarla (örneğin haftada bir veya ayda bir) yeni bir ön anahtarı IK_B kullanarak imzasıyla birlikte yükleyecektir. Yeni imzalı ön anahtar ve imzaları, önceki değerlerin yerini alacaktır.
Yeni bir imzalı curve ve imzalı son çare pqkem ön anahtar çifti yüklendikten sonra Bob, iletim sırasında gecikmiş olabilecek ve bu anahtarları kullanan iletileri işleyebilmek için, önceki çifte karşılık gelen özel anahtarı bir süre daha saklayabilir. Sonunda Bob, ileri gizlilik için bu özel anahtarı silmelidir (tek kullanımlık ön anahtar özel anahtarları, Bob bunları kullanan iletileri aldıkça silinecektir; bkz. Bölüm 3.4).
3.3. İlk iletinin gönderilmesi
Bob ile PQXDH anahtar anlaşması gerçekleştirmek için Alice sunucuyla iletişim kurar ve aşağıdaki değerleri içeren bir "ön anahtar paketi" alır:
- Bob'un curve kimlik anahtarı IK_B
- Bob'un imzalı curve ön anahtarı ve tanımlayıcısı (SPK_B, IdEC(SPK_B))
- Bob'un curve ön anahtarı üzerindeki imzası Sig(IK_B, EncodeEC(SPK_B), Z_SPK)
- Bob'un imzalı tek kullanımlık pqkem ön anahtarlarından biri PQOPK_Bn ya da imzalı tek kullanımlık pqkem ön anahtarı kalmamışsa Bob'un son çare imzalı pqkem ön anahtarı PQSPK_B'den biri. Bu anahtara PQPK_B diyelim. Paket ayrıca IdKEM(PQPK_B)'yi de içerir.
- Bob'un pqkem ön anahtarı üzerindeki imzası Sig(IK_B, EncodeKEM(PQPK_B), Z_PQPK)
- (İsteğe bağlı olarak) Bob'un tek kullanımlık curve ön anahtarı OPK_Bn ve tanımlayıcısı IdEC(OPK_Bn)
Sunucu, varsa Bob'un curve tek kullanımlık ön anahtarlarından birini sağlamalı ve ardından onu silmelidir. Sunucudaki Bob'a ait tüm curve tek kullanımlık ön anahtarları silinmişse, paket tek kullanımlık bir curve ön anahtar öğesi içermeyecektir.
Sunucu, varsa Bob'un pqkem tek kullanımlık imzalı ön anahtarlarından biri PQOPK_Bn'yi sağlamayı ve ardından onu silmeyi tercih etmelidir. Sunucudaki Bob'a ait tüm pqkem tek kullanımlık imzalı ön anahtarlar silinmişse, paket bunun yerine Bob'un pqkem son çare imzalı ön anahtarı PQSPK_B'yi içerecektir.
Alice, ön anahtarlar üzerindeki imzaları doğrular. Herhangi bir imza denetimi başarısız olursa Alice protokolü durdurur. Aksi takdirde, tüm imza denetimleri başarılıysa Alice, açık anahtarı EK_A olan geçici bir curve anahtar çifti üretir. Alice ayrıca pqkem ile kapsüllenmiş bir paylaşılan giz üretir:
(CT, SS) = PQKEM-ENC(PQPK_B)
paylaşılan giz SS
şifreli metin CT
Paket bir curve tek kullanımlık ön anahtarı İÇERMİYORSA şu hesabı yapar:
DH1 = DH(IK_A, SPK_B)
DH2 = DH(EK_A, IK_B)
DH3 = DH(EK_A, SPK_B)
SK = KDF(DH1 || DH2 || DH3 || SS)
Paket bir curve tek kullanımlık ön anahtarı İÇERİYORSA hesaplama ek bir DH içerecek şekilde değiştirilir:
DH4 = DH(EK_A, OPK_B)
SK = KDF(DH1 || DH2 || DH3 || DH4 || SS)
SK hesaplandıktan sonra Alice geçici özel anahtarını, DH çıktılarını ve paylaşılan giz SS'yi siler.
Alice daha sonra her iki taraf için kimlik bilgisi içeren bir "ilişkili veri" bayt dizisi AD hesaplar:
AD = EncodeEC(IK_A) || EncodeEC(IK_B)
Eğer pqkem, PQPK_B'yi şifreli metne dâhil etmiyorsa Alice ayrıca EncodeKEM(PQPK_B)'yi AD'ye eklemelidir (Bölüm 4.12'deki tartışmaya bakın). Alice isteğe bağlı olarak AD'ye Alice ve Bob'un kullanıcı adları, sertifikaları veya başka tanımlayıcı bilgiler gibi ek bilgiler de ekleyebilir.
Alice daha sonra Bob'a aşağıdakileri içeren bir ilk ileti gönderir:
- Alice'in kimlik anahtarı IK_A
- Alice'in geçici anahtarı EK_A
- PQPK_B için SS'yi kapsülleyen pqkem şifreli metni CT
- Alice'in Bob'un hangi ön anahtarlarını kullandığını belirten tanımlayıcılar
- AD'yi ilişkili veri olarak kullanan ve şifreleme anahtarı olarak ya SK'yi ya da anahtarı SK olan bazı kriptografik PRF'nin çıktısını kullanan bir AEAD şifreleme düzeni [5] ile şifrelenmiş bir ilk şifreli metin
İlk şifreli metin genellikle PQXDH sonrası bir iletişim protokolündeki ilk iletidir. Başka bir deyişle bu şifreli metin tipik olarak iki role sahiptir: PQXDH sonrası bir protokol içindeki ilk ileti olarak görev yapar ve Alice'in PQXDH ilk iletisinin bir parçası olur.
Alıcı açısından ileti öğelerinin karışmaması için ilk ileti belirsizliğe yer bırakmayan bir biçimde kodlanmalıdır.
Bunu gönderdikten sonra Alice, Bölüm 4'te ele alınan güvenlik değerlendirmelerine tabi olarak, Bob ile iletişim için PQXDH sonrası protokol içinde SK'yi veya SK'den türetilen anahtarları kullanmaya devam edebilir.
3.4. İlk iletinin alınması
Alice'in ilk iletisini aldığında Bob, Alice'in kimlik anahtarını ve geçici anahtarını iletiden çıkarır. Bob ayrıca kendi kimlik özel anahtarını yükler ve anahtar tanımlayıcılarını kullanarak Alice'in kullandığı imzalı ön anahtarlara, tek kullanımlık ön anahtarlara ve KEM anahtarına karşılık gelen özel anahtar(lar)ı yükler.
Bob bu anahtarları kullanarak PQKEM-DEC(PQPK_B, CT) işlemini paylaşılan giz SS olarak hesaplar ve önceki bölümdeki DH ve KDF hesaplamalarını tekrarlayarak SK'yi türetir; ardından DH değerlerini ve SS değerlerini siler.
Bob daha sonra önceki bölümde açıklandığı gibi IK_A ve IK_B kullanarak AD bayt dizisini kurar. Son olarak Bob, SK ve AD kullanarak ilk şifreli metni çözmeye çalışır. İlk şifreli metnin çözülmesi başarısız olursa Bob protokolü durdurur ve SK'yi siler.
İlk şifreli metnin çözülmesi başarılı olursa protokol Bob için tamamlanmış olur. İleri gizlilik için Bob şifreli metni ve kullanılan tek kullanımlık ön anahtar özel anahtarını siler. Bob daha sonra, Bölüm 4'te ele alınan güvenlik değerlendirmelerine tabi olarak, Alice ile iletişim için PQXDH sonrası protokol içinde SK'yi veya SK'den türetilen anahtarları kullanmaya devam edebilir.