Bu sayfada Tink'in anahtarlar ve temel çıkış için kablo biçimi açıklanmaktadır. İlgili içeriği oluşturmak için kullanılan belgeleri, web sitelerine ek diller eklemek isteyen Kablo isteyen diğer üst düzey kripto kitaplıklarının tink ve yöneticileri uyumlu bir şekilde ayarlayabilirsiniz. Genel kitleye yönelik değildir.
Anahtar kümesi serileştirmesi
Tink, anahtar setlerini serileştirmek için Google protobuf'u kullanır.
- İkili serileştirilmiş anahtar kümesi, tink.proto. Bir anahtarın KeyData değer özelliği serileştirilmiş protonu kullanabilirsiniz.
- JSON serileştirilmiş anahtar kümesi, JSON biçiminde serileştirilmiş bir Anahtar Kümesi protokolüdür. KeyData değerinin hâlâ ikili serileştirilmiş bir protokol olduğunu unutmayın.
- Şifrelenmiş anahtar kümesi, tink.proto. Şifrelenmiş bir ikili program serileştirilmiş anahtar kümesi içeriyor ve isteğe bağlı olarak bazı şifrelenmemiş KeysetInfo meta verileri içerir.
Tink Çıkış Öneki
Çoğu Tink temel öğesi, şunlardan oluşan 5 baytlık çıkış önekini destekler:
- 1 baytlık sürüm:
0x01
- 4 bayt anahtar ipucu: Bu, kullanılan anahtarın anahtar kimliğidir.
Bazı eski anahtarlar 0x00
sürüm baytını da destekleyebilir.
Bu ön ekin kimliğinin doğrulanmadığını ve güvenlik açısından ona güvenilemeyeceğini unutmayın amaçlar. Tink, şifre çözme ve doğrulamayı hızlandırmak için bunu ipucu olarak kullanıyor.
AEAD
Genel olarak, Tink biçimleri AEAD şifre metinlerini aşağıdaki gibi kullanır:
prefix || IV || ciphertext || tag
(ilgili RFC'de aksi belirtilmedikçe). prefix
alanı boş
veya 5 bayt Tink çıkış öneki kullanın.
AES-CTR-HMAC
Tink, AES-CTR-HMAC için MAC'yi ilişkili verilerle (AD) şu şekilde hesaplar:
AD || IV || ciphertext || bitlen(AD)
burada bitlen(AD)
, AD'nin 64 bit büyük son olarak temsil edilen bit cinsinden uzunluğudur
imzasız tam sayıdır. Bu HMAC şeması,
Mcgrew.
Belirleyici AEAD
Tink, AES-SIV için RFC 5297'yi uygulayarak sentetik şifrelenmiş metnin başındaki başlatma vektörü (SIV). Temel öğe, 5 baytlık Tink çıkışı öneki ekleyebilir.
RFC 5297, ilişkilendirilmiş verilerin bir listesini desteklese de Tink, Bu, RFC 5297'deki bir öğeli bir listeye karşılık gelen ilişkilendirilmiş bir veridir. Boş ilişkilendirilmiş veri, boş öğe değil, tek boş öğe içeren bir listedir liste'ye dokunun.
AEAD akışı
Bkz. AES-CTR HMAC ve AES-GCM-HKDF
Zarf şifrelemesi
Zarf şifrelemesi, verileri bir veri şifreleme anahtarıyla (DEK
) şifreler.
Tink'in AEAD temel öğeleri. Şifreleme şu şekilde çalışır:
- Belirli bir anahtar şablonu (veya anahtar parametreler) kullanılarak yeni bir
DEK
oluşturulur. DEK
, bir bayt dizesi olarak serileştirilir. Serileştirme biçimi anahtar türü protonunun protokol arabelleği serileştirilmesi. Örneğin bu bir şurada tanımlanmış serileştirilmişAesGcmKey
protokol arabellek mesajı: AES GCM anahtar türündeki DEK için aes_gcm.proto. Serileştirme hakkında bilgi edinmek için protokol arabelleği serileştirme konusuna bakın bir protokol arabelleğidir.- Serileştirilmiş
DEK
, harici bir sağlayıcı (örneğin, GCP) tarafından şifrelendiyse birencrypted DEK
biçimine dönüştürdü. DEK
, ilişkilendirilmiş verilerle düz metni şifrelemek için kullanılır.ciphertext
. Dolayısıylaciphertext
, AEAD temel öğesi ile tam olarak aynı biçime sahiptirDEK
için geçerlidir.
Zarf şifrelemesinin çıkış biçimi şöyledir:
encrypted DEK length || encrypted DEK || ciphertext
encrypted DEK length
, 4 bayttır ve encrypted DEK
olması gerekir.
MAC
Tink, ilgili RFC'leri izler. Temel öğeler 5 bayt Tink çıkışı ekleyebilir ön eki eklemektir.
PRF grubu
Tink, ilgili RFC'leri izler. PRF Set'te anahtar türünün farklı olduğuna dikkat edin çıkış uzunluğunu dahil etmeyerek aynı algoritmanın MAC anahtarı türünden kaldırın. PRF Set anahtarları hiçbir zaman Tink çıkışı öneki eklemez. Bu, çıkışın gerçekten PRF.
Karma şifreleme
Tink karma şifreleme için genel kablo biçimi şöyledir:
prefix || encapsulated_key || encrypted_data
prefix
ya boş ya da 5 bayt Tink çıkış öneki. Her anahtar türü
ayrıştırılması gereken bayt ve bu baytların
encapsulated_key
HPKE (Karma Ortak Anahtar Şifreleme)
Tink, RFC 9180'de tanımlanan HPKE standardını uygular. HPKE şifreleme paketlerinde aşağıdaki üç temel öğe bulunur.
- Anahtar kapsülleme mekanizması (KEM)
- Anahtar türev işlevi (KDF)
- İlişkilendirilmiş verilerle kimliği doğrulanmış şifreleme (AEAD)
HPKE standardı, RFC 9180, Bölüm'de genel bir kablo biçimi tanımlamaz.
10. Tink'in HPKE uygulaması aşağıdakileri kullanır:
encapsulated_key
ve encrypted_data
değerleri.
encapsulated_key
- Gönderenin serileştirilmiş ortak anahtarı
- Şu dilde
enc
olarak tanımlanıyor: RFC 9180, Bölüm 4.1 - Biçim, kullanılan HPKE KEM tarafından belirlenir
encrypted_data
- Şifreli metin ve etiket (ör. IV olmadan
ciphertext || tag
) - Şu dilde
ct
olarak tanımlanıyor: RFC 9180, Bölüm 4 - Biçim, kullanılan belirli HPKE AEAD tarafından belirlenir
- Şifreli metin ve etiket (ör. IV olmadan
X25519 Diffie-Hellman tabanlı KEM
X25519 DHKEM için enc
değeri, gönderenin 32 baytlık Diffie-Hellman değeri herkese açık olur.
tuşuna basın.
ECIES-AEAD-HKDF
Tink'in ECIES-AEAD-HKDF uygulaması için encapsulated_key
çıktısıdır
encrypted_data
ise çıktıdır
(DEM) başlatıyoruz.
KEM
Tink, anahtar türüne bağlı olarak sıkıştırılmış ve sıkıştırılmamış elips biçimli eğri kullanır
RFC 8422/ANSI.X9-62.2005
kodlama standartlarına uygun hale getirir. Örneğin,
sıkıştırılmamış noktalardan, 0x04
baytından sonra x
ve y
koordinatını belirlemeye çalışır. Sıkıştırılmış koordinatlar için 0x02
baytı
veya 0x03
ya da sabit boyutlu bir tam sayı olarak x
koordinatı kullanılır. X25519
için,
RFC 7748 tanımı kullanılır (sabit boyutlu tam sayı olarak x
koordinatı).
DEM
Tink, encrypted_data
için AEAD ile aynı biçimi kullanır. Buna şunlar dâhildir:
bir IV belirtildiğinden emin olun.
Anahtar türevi
İlk olarak, paylaşılan noktanın x_ss
x koordinatı hesaplanır. Bu özellik için
Bu durumda AEAD şu değere ayarlanır:
HKDF(ikm = encapsulated_key || x_ss, salt = salt_of_key, info = context_info, length = dem_key_size)
Burada encapsulated_key
, bayt cinsinden tam KEM çıkışıdır.
Dijital imzalar
Tink, ilgili RFC'leri izler. Temel öğeler 5 bayt Tink çıkışı ekleyebilir ön ekini oluşturun.
ECDSA
Anahtardaki EcdsaSignatureEncoding alanına bağlı olarak,
ECDSA imzası IEEE P1363
veya ASN.1 DER
biçimindedir.
IEEE P1363
imzasının biçimi r || s
şeklindedir. Burada r
ve s
bulunur
boş dolguludur ve bayt olarak eğrinin sıralamasıyla aynı boyuta sahiptir. Örneğin,
Örneğin, NIST P-256
eğrisi için r
ve s
, 32 bayta sıfır dolguludur.
DER imzası, ASN.1
kullanılarak kodlanır:
ECDSA-Sig-Value :: = SEQUENCE { r INTEGER, s INTEGER }
Özellikle, kodlama:
0x30 || totalLength || 0x02 || r's length || r || 0x02 || s's length || s
Tink, imza doğrulaması için en iyi uygulamaları benimseyerek yalnızca DER kodlamalı ECDSA imzaları (BER kodlu alternatif imzalar geçersizdir).
Bu, genellikle etkileyen imza yol açıcılığı saldırılarının önlenmesine yardımcı olur. kripto para birimi sistemleri.