2.1. X3DH parametreleri
X3DH kullanan bir uygulama birkaç parametreye karar vermelidir:
| Ad | Tanım |
|---|---|
| curve | X25519 veya X448 |
| hash | 256 veya 512 bitlik bir özet işlevi (örn. SHA-256 veya SHA-512) |
| info | Uygulamayı tanımlayan bir ASCII dizgesi |
Örneğin, bir uygulama curve olarak X25519, hash olarak SHA-512 ve info olarak "MyProtocol" seçebilir.
Bir uygulama ayrıca, bir X25519 veya X448 açık anahtarı PK'yi bir bayt dizisine kodlamak için Encode(PK) adlı bir kodlama işlevi tanımlamalıdır. Önerilen kodlama, eğri tipini temsil eden tek baytlık bir sabitin ardından [1]'de belirtildiği gibi u-koordinatının little-endian kodlamasından oluşur.
2.2. Kriptografik gösterim
X3DH aşağıdaki gösterimi kullanacaktır:
Bayt dizileri X ve Y'nin birleştirilmesi
X || Y'dir.DH(PK1, PK2), PK1 ve PK2 açık anahtarlarıyla temsil edilen anahtar çiftlerini içeren bir Eliptik Eğri Diffie-Hellman işlevinden çıkan paylaşılan gizli çıktısı olan bir bayt dizisini ifade eder. Eliptik Eğri Diffie-Hellman işlevi, curve parametresine bağlı olarak [1]'deki X25519 veya X448 işlevlerinden biri olacaktır.Sig(PK, M), M bayt dizisi üzerinde bir XEdDSA imzası olan, PK açık anahtarıyla doğrulanan ve M'nin PK'nin karşılık gelen özel anahtarıyla imzalanmasıyla elde edilen bayt dizisini ifade eder. XEdDSA için imzalama ve doğrulama işlevleri [2]'de belirtilmiştir.KDF(KM), aşağıdaki girdilerle HKDF algoritmasından [3] gelen 32 baytlık çıktıyı ifade eder:- HKDF input key material =
F || KM; burada KM gizli anahtar malzemesi içeren bir girdi bayt dizisidir ve F, curve X25519 ise 32 adet0xFFbaytı, curve X448 ise 57 adet0xFFbaytı içeren bir bayt dizisidir. F, XEdDSA [2] ile kriptografik alan ayrımı için kullanılır. - HKDF salt = Uzunluğu hash çıktı uzunluğuna eşit olan, sıfırlarla doldurulmuş bir bayt dizisi.
- HKDF info = Bölüm 2.1'deki info parametresi.
- HKDF input key material =
2.3. Roller
X3DH protokolü üç taraf içerir: Alice, Bob ve bir sunucu.
Alice, Bob'a şifreleme kullanarak bazı ilk verileri göndermek ve ayrıca çift yönlü iletişim için kullanılabilecek paylaşılan bir gizli anahtar oluşturmak ister.
Bob, Alice gibi tarafların kendisiyle paylaşılan bir anahtar oluşturmasına ve şifreli veri göndermesine izin vermek ister. Ancak Bob, Alice bunu yapmaya çalıştığında çevrimdışı olabilir. Bunu mümkün kılmak için Bob'un bir sunucuyla ilişkisi vardır.
sunucu, Alice'ten Bob'a gönderilen ve Bob'un daha sonra alabileceği iletileri saklayabilir. Sunucu ayrıca Bob'un bazı verileri yayımlamasına imkân tanır; sunucu bu verileri Alice gibi taraflara sağlar. Sunucuya duyulan güven miktarı Bölüm 4.7'de ele alınmaktadır.
Bazı sistemlerde sunucu rolü birden fazla varlık arasında bölünmüş olabilir, ancak basitlik açısından Alice ve Bob için yukarıdaki işlevleri sağlayan tek bir sunucu varsayıyoruz.
2.4. Anahtarlar
X3DH aşağıdaki eliptik eğri açık anahtarlarını kullanır:
| Ad | Tanım |
|---|---|
| IK_A | Alice'in kimlik anahtarı |
| EK_A | Alice'in geçici anahtarı |
| IK_B | Bob'un kimlik anahtarı |
| SPK_B | Bob'un imzalı ön anahtarı |
| OPK_B | Bob'un tek kullanımlık ön anahtarı |
Tüm açık anahtarların karşılık gelen bir özel anahtarı vardır, ancak açıklamayı basitleştirmek için açık anahtarlara odaklanacağız.
Bir X3DH protokol çalıştırması içinde kullanılan açık anahtarların tümü ya X25519 biçiminde olmalı ya da curve parametresine bağlı olarak tümü X448 biçiminde olmalıdır [1].
Her tarafın uzun ömürlü bir kimlik açık anahtarı vardır (Alice için IK_A, Bob için IK_B).
Bob'un ayrıca, düzenli aralıklarla değiştireceği imzalı bir ön anahtarı SPK_B ve her biri tek bir X3DH protokol çalıştırmasında kullanılan bir tek kullanımlık ön anahtar kümesi OPK_B vardır. ("Ön anahtarlar" bu adı alır çünkü esasen Bob'un, Alice protokol çalıştırmasını başlatmadan önce sunucuya yayımladığı protokol iletileridir.)
Her protokol çalıştırması sırasında Alice, açık anahtarı EK_A olan yeni bir geçici anahtar çifti üretir.
Başarılı bir protokol çalıştırmasından sonra Alice ve Bob 32 baytlık gizli bir anahtar SK paylaşacaktır. Bu anahtar, Bölüm 4'teki güvenlik değerlendirmelerine tabi olarak, X3DH sonrası güvenli iletişim protokollerinden birinde kullanılabilir.