Tink kablosu biçimi

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 bir encrypted DEK biçimine dönüştürdü.
  • DEK, ilişkilendirilmiş verilerle düz metni şifrelemek için kullanılır. ciphertext. Dolayısıyla ciphertext, AEAD temel öğesi ile tam olarak aynı biçime sahiptir DEK 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
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.