3.1. Genel bakış
X3DH üç aşamadan oluşur:
- Bob, kimlik anahtarını ve ö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, sunucuya aşağıdakileri içeren bir eliptik eğri açık anahtarları kümesi yayımlar:
- Bob'un kimlik anahtarı IK_B
- Bob'un imzalı ön anahtarı SPK_B
- Bob'un ön anahtar imzası
Sig(IK_B, Encode(SPK_B)) - Bob'un tek kullanımlık ön anahtarlarından oluşan bir küme (OPK_B1, OPK_B2, OPK_B3, ...)
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).
Bob ayrıca belirli aralıklarla (örneğin haftada bir veya ayda bir) yeni bir imzalı ön anahtar ve ön anahtar imzası da yükleyecektir. Yeni imzalı ön anahtar ve ön anahtar imzası, önceki değerlerin yerini alacaktır.
Yeni bir imzalı ön anahtar yükledikten sonra Bob, iletim sırasında gecikmiş iletileri işleyebilmek için, önceki imzalı ön anahtara karşılık gelen özel anahtarı bir süre daha tutabilir. 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 X3DH 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 kimlik anahtarı IK_B
- Bob'un imzalı ön anahtarı SPK_B
- Bob'un ön anahtar imzası
Sig(IK_B, Encode(SPK_B)) - (İsteğe bağlı olarak) Bob'un tek kullanımlık ön anahtarı OPK_B
Sunucu, varsa Bob'un tek kullanımlık ön anahtarlarından birini sağlamalı ve ardından onu silmelidir. Sunucudaki Bob'a ait tüm tek kullanımlık ön anahtarlar silinmişse, paket tek kullanımlık bir ön anahtar içermeyecektir.
Alice, ön anahtar imzasını doğrular ve doğrulama başarısız olursa protokolü durdurur. Alice daha sonra açık anahtarı EK_A olan bir geçici anahtar çifti üretir.
Paket tek kullanımlık ön anahtar içermiyorsa ş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)
Paket tek kullanımlık bir ön anahtar içeriyorsa, hesaplama ek bir DH içerecek şekilde değiştirilir:
DH4 = DH(EK_A, OPK_B)
SK = KDF(DH1 || DH2 || DH3 || DH4)
Aşağıdaki diyagram, anahtarlar arasındaki DH hesaplamalarını gösterir. DH1 ve DH2'nin karşılıklı doğrulama sağladığına, DH3 ve DH4'ün ise ileri gizlilik sağladığına dikkat edin.
IK_A IK_B
\ / |
\ 1 / |
\ __/ |
\ / |
/ \ |
2 / \ |
/ 3 \ |
EK_A -------+--------+--+--- SPK_B
\ |
4 \ |
\ |
\ |
+---+------- OPK_B
|
(4 isteğe bağlıdır,
kesik çizgi = OPK varsa)
SK hesaplandıktan sonra Alice geçici özel anahtarını ve DH çıktılarını siler.
Alice daha sonra her iki taraf için kimlik bilgisi içeren bir "ilişkili veri" bayt dizisi AD hesaplar:
AD = Encode(IK_A) || Encode(IK_B)
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
- 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 [4] ile şifrelenmiş bir ilk şifreli metin
İlk şifreli metin genellikle X3DH sonrası bir iletişim protokolündeki ilk iletidir. Başka bir deyişle bu şifreli metin tipik olarak iki role sahiptir: X3DH sonrası bir protokol içindeki ilk ileti olarak görev yapar ve Alice'in X3DH ilk iletisinin bir parçası olur.
Bunu gönderdikten sonra Alice, Bölüm 4'teki güvenlik değerlendirmelerine tabi olarak, Bob ile iletişim için X3DH 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, iletiden Alice'in kimlik anahtarını ve geçici anahtarını çıkarır. Bob ayrıca kendi kimlik özel anahtarını ve Alice'in kullandığı imzalı ön anahtara ve tek kullanımlık ön anahtara (varsa) karşılık gelen özel anahtar(lar)ı yükler.
Bob bu anahtarları kullanarak önceki bölümdeki DH ve KDF hesaplamalarını tekrarlayarak SK'yi türetir ve ardından DH 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. Bob, ileri gizlilik için kullanılan tek kullanımlık ön anahtar özel anahtarını siler. Bob daha sonra, Bölüm 4'teki güvenlik değerlendirmelerine tabi olarak, Alice ile iletişim için X3DH sonrası protokol içinde SK'yi veya SK'den türetilen anahtarları kullanmaya devam edebilir.