Skip to content

RAM-LFE

RAM-LFE Random-Access Machine Laconic Function Evaluation deməkdir. Iroha da, ictimai siyasəti zəncirdə olan, lakin qiymətləndiricisi məntiqi, gizli və ya xam girişləri dünya dövlətinə yazılmamalı olan proqramlar üçün ümumi gizlənmiş funksiya qatıdır. Xüsusi telefon və ya e-poçt axtarışı kimi SORA Nexus identifikator axınları tərəfindən istifadə olunur və bir düyün profili tətbiqetmə ilə üzləşən marşrutları təmin edərkən ümumi Torii proqram icrası köməkçisi olaraq da aşkar edilə bilər.

Zəngin siyasət öhdəliyi və qəbulu təsdiqləmə metadatalarını saxlayır. Bir həllçi və ya Torii icra vaxtı gizli proqramı qiymətləndirir, yalnız icazə verilən çıxışı qaytarır və müştərilərin, dəstək vasitələrinin və ya kitabxana təlimatlarının qeydiyyata alınmış siyasətə uyğun olaraq təsdiq edə biləcəyi bir qəbulu əlavə edir.

Adlandırma

Adlandırma bölünməsi vacibdir:

MüddətMəna
ram_lfeXarici gizli funksiya abstraksiyası: proqram siyasəti, öhdəliklər, icra qəbulu və qəbulu təsdiqləmə rejimi.
BFVŞifreli giriş RAM-LFE arxa tərəflər tərəfindən istifadə olunan Brakerski/Fan-Vercauteren homomorf şifrələmə sxemi.
ram_fhe_profileProqramlaşdırılmış şifrələnmiş icra maşını üçün BFV xüsusi metadata malikdir. Bu, RAM-LFE üçün ikinci ad deyil.

Məlumat modelində RamLfeProgramPolicyRamLfeExecutionReceipt RAM-LFE növləridir. BFV parametrləri, şifrəli mətn qovşaqları və gizli RAM-FHE proqram profili bir siyasət tərəfindən istifadə olunan şifreli icra arxa planına aiddir.

Kitabda qeyd olunanlar

Bir RAM-LFE proqram siyasəti qlobal səviyyədə program_id tərəfindən qeydiyyatdan keçirilir.

  • Siyasəti aktivləşdirə, deaktiv edə və ya başqa bir şəkildə dəyişdirə bilən sahib hesabı
  • Müştərilərə elan edilən arxa end
  • Qəbulu yoxlama rejimi, ya signed və ya proof
  • Gizli proqram metadataları və qiymətləndiricinin sirri ilə bağlı bir öhdəlik
  • İmzalanmış reseptlərin həllçisi ictimai açarı
  • BFV parametrləri və ram_fhe_profile kimi seçməli ictimai şifrəli giriş metadataları.
  • active nişanı, polisin yeni rəsmlər verə biləcəyini nəzarət edir.

Gizli sirr, açıq mətn identifikatorı və gizli proqram bədəni dünya vəziyyətində saxlanılmır. Müştərilər öhdəlikləri, qeyri-şəffaf hashləri, qəbulu hashları, şifrəli mətnlər və proqram həzmlərini qeyri-şəşfi protokol dəyərləri kimi qəbul etməlidirlər.

Arxa səhifələr

Hal-hazırda RAM-LFE dəstəyi üç arxa səviyyəli identifikatorlara əsaslanır:

Arxa tərəfistifadə
hkdf-sha3-512-prf-v1Ödənişə bağlı PRF qiymətləndirmə.
bfv-affine-sha3-256-v1BFV tərəfindən dəstəklənmiş gizli bir qiymətləndirmə kodlanmış identifikator boşluqları üzərində.
bfv-programmed-sha3-256-v1BFV dəstəklənmiş şifrələnmiş qeydlər və yaddaş yolları üzərində proqramlaşdırılmış icra.

İdentifikator siyasətləri üçün proqramlaşdırılmış BFV arxa tərəf mühüm müasir yoldur. Bu cüzdanların yerli olaraq normalaşmış girişləri şifrələməsinə imkan verir, həllçi əməliyyatda ictimai bir identifikatoru görmədən qiymətləndirməyə imkan verir, və buraxılış hashini qeydiyyatdan keçmiş proqram siyasətinə bağlayan bir rəsmi göndərir.

Riyaziyyat

Bu bölmə mövcud RAM-LFE kodu tərəfindən istifadə olunan tətbiq səviyyəsində algəbrini təsvir edir. Bu təhlükəsizlik sübutu deyil; siyasətlərin, qəbulu və müştərilərin razılaşması lazım olan müəyyənləşdirilmiş transkript və şifrələnmiş qiymətləndirmə modelidir.

Qeydiyyat

Deyirlər:

  • (H(m)) Iroha Hash::new(m): Blake2b-32 üzərində m, son baytın ən az əhəmiyyətli bitini məcbur edərək 1.
  • (N(x)) x kanonik Norito kodlaması olmalıdır.
  • (a \parallel b) bayt xətti birləşdirilməsi deməkdir.
  • (\operatorname{le64} ((i) ) imzalanmamış tam rəqəmlərin 8 bayt kiçik endik kodlaşdırılması olmalıdır.
  • (s) dünya dövlətinin xaricində saxlanan gizli həllçi ola bilər.
  • (P) dövlət siyasətinin parametrləri olmalıdır.
  • (A) ilə əlaqəli məlumatlar tələb olunur.
  • (x) normallaşdırılmış giriş baytları və ya Norito kodlanmış şifrələnmiş giriş bağçası olmalıdır, arxadan etibarən.

RAM-LFE domenlər üçün ayrılmış hashlərdən istifadə edir. Aşağıdakı formulalar domenlərin məqsədi ilə adlandırılır; onların mövcud bayt silsilələri:

SimvolDomain silsiləsi
(D_{\mathrm{policy}})iroha.ram_lfe.policy.hkdf_sha3_512_prf.v1
(D_{\mathrm{secret}})iroha.ram_lfe.policy_secret.hkdf_sha3_512_prf.v1
(D_{\mathrm{salt}})iroha.ram_lfe.hkdf_salt.hkdf_sha3_512_prf.v1
(D_{\mathrm{hkdf_opaque}})iroha.ram_lfe.opaque_info.hkdf_sha3_512_prf.v1
(D_{\mathrm{hkdf_receipt}})iroha.ram_lfe.receipt_info.hkdf_sha3_512_prf.v1
(D_{\mathrm{opaque}})iroha.ram_lfe.opaque_hash.hkdf_sha3_512_prf.v1
(D_{\mathrm{receipt}})iroha.ram_lfe.receipt_hash.hkdf_sha3_512_prf.v1
(D_{\mathrm{affine_circuit}})iroha.ram_lfe.bfv_affine.circuit.v1
(D_{\mathrm{affine_opaque}})iroha.ram_lfe.bfv_affine.opaque_hash.v1
(D_{\mathrm{affine_receipt}})iroha.ram_lfe.bfv_affine.receipt_hash.v1
(D_{\mathrm{program_memory}})iroha.ram_lfe.bfv_program.memory.v1
(D_{\mathrm{program_opaque}})iroha.ram_lfe.bfv_program.opaque_hash.v1
(D_{\mathrm{program_receipt}})iroha.ram_lfe.bfv_program.receipt_hash.v1
(D_{\mathrm{program_digest}})iroha.ram_lfe.bfv_program.digest.v1
(D_{\mathrm{output}})iroha.ram_lfe.output_hash.v1
(D_{\mathrm{id_opaque}})iroha.ram_lfe.identifier.opaque_hash.v1
(D_{\mathrm{id_receipt}})iroha.ram_lfe.identifier.receipt_hash.v1
(D_{\mathrm{bfv_keygen}})iroha.crypto.fhe.bfv.keygen.v1
(D_{\mathrm{bfv_encrypt}})iroha.crypto.fhe.bfv.encrypt.v1
(D_{\mathrm{id_keygen}})iroha.crypto.fhe.bfv.identifier.keygen.v1
(D_{\mathrm{id_slot}})iroha.crypto.fhe.bfv.identifier.slot.v1

Siyasət öhdəliyi

Siyasət öhdəliyi ictimai parametrləri və gizli həll edən sirrini bir arxa başa bağlayır. Birincisi, sirr ayrı-ayrı şəkildə həyata keçirilir:

Cs=H(Dsecrets) C_s = H(D_{\mathrm{secret}} \parallel s)

Sonra bütün siyasət transkriptini kodlaşdırır:

Tpolicy=N(backend,P,Cs) T_{\mathrm{policy}} = N(\mathrm{backend}, P, C_s)

və nəşr olunmuş siyasət hash:

policy_hash=H(DpolicyTpolicy) \mathrm{policy\_hash} = H(D_{\mathrm{policy}} \parallel T_{\mathrm{policy}})

Zəngində olan PolicyCommitment aşağıdakılardır:

(backend,policy_hash,P) (\mathrm{backend}, \mathrm{policy\_hash}, P)

Qiymətləndirmə iş vaxtı sirrindən eyni dəyərini yenidən hesablayır. Yenidən hesablanan hash fərqlənirsə, qiymətləndirilmə öhdəlik uyğunsuzluğu ilə uğursuz olur.

HKDF-SHA3-512 Backend

hkdf-sha3-512-prf-v1 üçün çıxış normallaşdırılmış girişdir, lakin qeyri-aşkar identifikator və qəbulu hash gizli bağlanmış PRF çıxışıdır.

Tələb transkripti:

Treq=N(policy_hash,P,A,x) T_{\mathrm{req}} = N(\mathrm{policy\_hash}, P, A, x)

HKDF duz və pseudorandom açarı aşağıdakılardır:

salt=Dsaltpolicy_hash \mathrm{salt} = D_{\mathrm{salt}} \parallel \mathrm{policy\_hash}

PRK=HKDF-ExtractSHA3-512(salt,s) \mathrm{PRK} = \operatorname{HKDF\text{-}Extract}_{\mathrm{SHA3\text{-}512}} (\mathrm{salt}, s)

Göstərilməz material genişlənir və hash edilir:

mo=HKDF-ExpandSHA3-512(PRK,Dhkdf_opaqueTreq,32) m_o = \operatorname{HKDF\text{-}Expand}_{\mathrm{SHA3\text{-}512}} (\mathrm{PRK}, D_{\mathrm{hkdf\_opaque}} \parallel T_{\mathrm{req}}, 32)

opaque_id=H(Dopaquemo) \mathrm{opaque\_id} = H(D_{\mathrm{opaque}} \parallel m_o)

Qəbul materialı əlavə olaraq qeyri-şəffaf idini bağlayır:

mr=HKDF-ExpandSHA3-512(PRK,Dhkdf_receiptTreqopaque_id,32) m_r = \operatorname{HKDF\text{-}Expand}_{\mathrm{SHA3\text{-}512}} (\mathrm{PRK}, D_{\mathrm{hkdf\_receipt}} \parallel T_{\mathrm{req}} \parallel \mathrm{opaque\_id}, 32)

receipt_hash=H(Dreceiptmropaque_id) \mathrm{receipt\_hash} = H(D_{\mathrm{receipt}} \parallel m_r \parallel \mathrm{opaque\_id})

Arxa ucunda geri qaytarılır:

(output,opaque_id,receipt_hash)=(x,opaque_id,receipt_hash) (\mathrm{output}, \mathrm{opaque\_id}, \mathrm{receipt\_hash}) = (x, \mathrm{opaque\_id}, \mathrm{receipt\_hash})

BFV Premer

BFV şəbəkə əsaslı homomorf şifrələmə sxemidir. "Homomorf" o deməkdir ki, bir proqram şifrələnmiş dəyərləri əlavə və çoxalda bilər və şifrələndikdən sonra düz mətn dəyərlərində əlavələr və çoxuşları yerinə yetirərkən olduğu kimi eyni nəticəni əldə edə bilər .

RAM-LFE üçün BFV şifrələnmiş giriş mexanizmi kimi istifadə olunur:

  1. Cüzdan bir telefon nömrəsi və ya e-poçt ünvanı kimi şəxsi dəyərləri normallaşdırır.
  2. Cüzdan baytları kiçik tam saylı boşluqlara çevirir.
  3. Hər slot həllçinin BFV ictimai açarı ilə şifrələnir.
  4. Çözümçü idman vaxtı gizli proqramı həmin şifrə mətnləri üzərində qiymətləndirir.
  5. Runtime yalnız gizli proqram çıxışı və işarələri şifrələyir və ya qəbulu sübut edir.

BFV təxminən deyil, dəqiq tamsaylı aritmetikdir. Buna görə də identifikator baytları və kiçik modullar üçün daha yaxşı uyğun gəlir Qeyri-məsələnmiş nöqtə modelinin nəticəsindən daha çox hesablamalar. Iroha Gündəlik BFV istifadə, hər şifrəli slot bir skalar dəyər modulo daşıyır (t), Əsasən bir bayt və ya bir bayt uzunluğu sahəsi. şifrə mətni özü daha böyük tam sayın modulu yaşayır (q). Arasındakı boşluq (q) və (t) Şifrələmə və homomorf əməliyyatların gətirib çıxardığı səs-küy üçün şifrələnmə yeri verir.

BFV şifrəli mətnin iki polinomial komponentləri var:

c=(c0,c1) c=(c_0,c_1)

Gizli açar başqa bir polinomialdır (s_k). Şifrəmə komponentləri birləşdirir:

v=c0+c1sk v = c_0 + c_1s_k

Əgər şifrə mətni düzgün formalaşdırılıbsa və səs hələ də kifayət qədər azdırsa, (v) ölçülü düz mətnlə yaxındır. Dairləmə sadə mətn koeficientini modulo (t) bərpa edir. Faydalı xüsusiyyət, şifrəli mətn əməliyyatlarının bu quruluşu qoruyub saxlamasıdır:

Sadə əməliyyatŞifrəli mətn əməliyyatı
(m+n)Şifrəli mətn komponentlərini əlavə edin.
(m+\alpha)(c_0) -ə ölçülü düz mətn sabitini əlavə edin.
(\alpha m)Hər iki şifrəli mətn komponentini (\alpha) ilə ölçmək.
(mn)Şifrəli mətn çoxluqlarını qatlayın, yenidən ölçün və sonra yenidən xarakterizə edin.

Multiplikasiya bahalı bir əməliyyatdır. İki komponentli şifrə mətninin məhsulu təbii olaraq (1), (s_k) və (s_k^2) ilə şifrələnən üçkomponentli şifrəni yaradır. Relinearization (s_k^2) terminini normal iki komponentli şifrəli mətnə yenidən qatmaq üçün nəşr edilmiş qiymətləndirmə açarından istifadə edir. Bu, eyni şifrəli məzmunu istifadə edərək sonrakı əlavələri və çoxluqları saxlayır.

BFV həmçinin "məsərəli"dir: hər şifrələnmiş əməliyyat müəyyən bir səs-küy büdcəsini istehlak edir. Bu tətbiq bu büdcəni yeniləmək üçün şifrəli mətnləri başlatmır. Bunun əvəzinə, RAM-LFE kiçik bir ram_fhe_profile nəşr edir və yalnız məhdud gizli proqram formasını qəbul edir. Bu, qiymətləndirilməni parametrlər dəstinin dəstəklənmiş dərinliyində saxlayır.Hazırda proqramlaşdırılmış profil sabit qeydiyyat sayını, sabit yaddaş zolağı sayını və ən çox bir sifrə mətni-sifir mətni hər proqramlaşdırılan addım üçün qatlamağa imkan verir.

Bu RAM-LFE dizaynında, BFV müştərinin girişini ictimai kitabın məlumatlarından və yalnız əməliyyatı görən müşahidəçilərdən gizlədir və ya marşrut paylı yük. Bu isə o demək deyil ki, zəncir özbaşına keyfiyyətli şifrələnmiş proqramları icra edir. Torii həllinin işləmə vaxtı hələ də BFV gizli materialına malikdir, qurulmuş gizli proqramı qiymətləndirir, icazə verilən çıxışı şifrələyir və nəticəni təsdiqləyir. Sonra kitabxana şəhadətnaməni silsilədə siyasət öhdəliyi ilə müqayisədə yoxlayır və ictimai açar və ya sübut meta məlumatlarını həll edir.

İdentifikator istifadə halı məqsədəuyğun olaraq sadə bir təmsil seçir. Normallaşdırılmış bir silsilə aşağıdakı kimi kodlanır:

text
[length, byte_0, byte_1, ..., byte_n, 0, 0, ...]

Hər bir element öz BFV skalar şifrə mətni kimi şifrələnir. Bu forma normalaşmanı və qabıq təsdiqləməsini açıq edir, cüzdanlara ictimai parametrlərdən şifrəli müraciətlər qurmağa imkan verir və həllçiyə ekvivalent şifrəli girişləri sabit qəbulu transkriptinə kanonikalaşdırmağa imkan verir.

BFV Yüzük modeli

BFV arxa tərəflərdə negaciklik polinomial üzük istifadə olunur:

Rq=Zq[X]/(Xn+1) R_q = \mathbb{Z}_q[X] / (X^n + 1)

və sadə mətn üzükü:

Rt=Zt[X]/(Xn+1) R_t = \mathbb{Z}_t[X] / (X^n + 1)

yerində:

  • (n) - polynomial_degree, iki güc
  • (q) - ciphertext_modulus
  • (t) - plaintext_modulus
  • (q > t) və (t \mid q)
  • (\Delta = q/t)
  • (B = 2^{\mathrm{decomposition_base_log}})

Sadə mətn koeficientləri vektorları hər bir koeficientin miqyasını artıraraq kodlanır:

EncPlain(m)i=Δmimodq \operatorname{EncPlain}(m)_i = \Delta m_i \bmod q

Dekriptləşdirmə mərkəzi hissəsi hər bir koeffitsiyentə:

v=c0+c1skRq v = c_0 + c_1 s_k \in R_q

sonra onu (R_t) olaraq yenidən yuvarlayır:

Dec(c)i=tcenterq(vi)qmodt \operatorname{Dec}(c)_i = \left\lfloor \frac{t \cdot \operatorname{center}_q(v_i)}{q} \right\rceil \bmod t

Burada (s_k) BFV gizli açar polinomudur, xarici RAM-LFE həllçi sırası (s) deyil.

BFV Əsas nəsil

Şifreli identifikator girişləri üçün BFV açar materialı həlledici gizli və əlaqəli məlumatlara görə müəyyənləşdirilir:

σid=H(Did_keygenAs) \sigma_{\mathrm{id}} = H(D_{\mathrm{id\_keygen}} \parallel A \parallel s)

BFV RNG aşağıdakı kimi əkin edilir:

ChaCha20Rng(H(Dbfv_keygenσid)) \operatorname{ChaCha20Rng}(H(D_{\mathrm{bfv\_keygen}} \parallel \sigma_{\mathrm{id}}))

Əsas generator nümunələri:

  • (s_k \in {-1,0,1}^n), modulo (q) olaraq təmsil olunur.
  • (a \leftarrow R_q) vahid olaraq
  • (e \in {-1,0,1}^n)

İctimai açar:

pk=(b,a),b=aske(modq) \mathrm{pk}=(b,a),\qquad b = -a s_k - e \pmod q

Yeniləmə üçün (s_k^2) (R_q)-dəki üzük məhsulu olmalıdır. Hər bir baza-(B) rəqəm üçün (j), kiçik bölüşdürülmədən (a_j) və (e_j) nümunəsini eyni şəkildə çıxarın və sonra nəşr edin:

rlkj=(bj,aj),bj=ajskej+Bjsk2(modq) \mathrm{rlk}_j=(b_j,a_j),\qquad b_j = -a_j s_k - e_j + B^j s_k^2 \pmod q

İctimaiyyət BFV siyasət metadata ((n,q,t,B) ), ictimai açar və max_input_bytes. İndiki BFV Gizli açar və relinearization açarı həllçi işləmə vaxtında qalır.

BFV Şifrələmə və əməliyyatlar

Sadə mətn polinomiyasını (m) şifrələmək üçün tətbiq başqa bir ChaCha20 RNG toxumları ilə:

H(Dbfv_encryptseed) H(D_{\mathrm{bfv\_encrypt}} \parallel \mathrm{seed})

(u,e_1,e_2 \in {-1,0,1}^n) nümunələrini götürür və hesablayır:

c0=bu+e1+EncPlain(m)(modq) c_0 = b u + e_1 + \operatorname{EncPlain}(m) \pmod q

c1=au+e2(modq) c_1 = a u + e_2 \pmod q

Şifrəli mətn (c=(c_0,c_1)).

Homomorf birləşmə tərkib hissəsi ilə müqayisədə:

c+d=(c0+d0, c1+d1)(modq) c+d=(c_0+d_0,\ c_1+d_1)\pmod q

Yalnız (c_0) sıfır dəyişikliklər koeffitsientiyə düz mətn skalarını (\alpha) əlavə etmək:

c+α=(c0+Δα, c1)(modq) c+\alpha = (c_0 + \Delta\alpha,\ c_1)\pmod q

Sadə mətn skalari (\alpha) ilə dəfələmək hər iki komponentin miqyasını artırır:

αc=(αc0, αc1)(modq) \alpha c = (\alpha c_0,\ \alpha c_1)\pmod q

İki şifrə mətni (c=(c_0,c_1)) və (d=(d_0,d _1)) üçün şifrə məzmunu dəfələməsi əvvəlcə üç ölçülü bir şifrə mətnini hesablayır və hər bir koeficienti geriyə (t/q) ilə ölçür:

c~0=t(c0d0)qmodq \tilde c_0 = \left\lfloor \frac{t(c_0 d_0)}{q} \right\rceil \bmod q

c~1=t(c0d1+c1d0)qmodq \tilde c_1 = \left\lfloor \frac{t(c_0 d_1 + c_1 d_0)}{q} \right\rceil \bmod q

c~2=t(c1d1)qmodq \tilde c_2 = \left\lfloor \frac{t(c_1 d_1)}{q} \right\rceil \bmod q

Yuxarıda göstərilən bütün məhsullar (R_q) -dəki negaciklik üzük məhsullarıdır. Sonra (\tilde c_2) baza-(B) polinomlarına parçalanır:

c~2=jBjuj \tilde c_2 = \sum_j B^j u_j

və yenidən xarakterizə edilmişdir:

c0=c~0+jujbj(modq) c'_0 = \tilde c_0 + \sum_j u_j b_j \pmod q

c1=c~1+jujaj(modq) c'_1 = \tilde c_1 + \sum_j u_j a_j \pmod q

Nəticədə yenidən iki komponentli BFV şifrəli mətn əldə edilir.

Kimlik şifri mətn qovşusu

İdentifikator giriş bayt silsiləsi:

x=(x0,,x1) x=(x_0,\ldots,x_{\ell-1})

skalar boşluqlara kodlanmışdır:

m0= m_0 = \ell

mi+1=xi,0i< m_{i+1}=x_i,\qquad 0 \le i < \ell

və qalan bütün boşluqlar sıfırdan max_input_bytes + 1 qədərdir. Hər bir skalar boşluq sıfır düz mətn polinomiyası ([m_i]) kimi şifrələnir.

σi=H(Did_slotseedle64(i)) \sigma_i = H(D_{\mathrm{id\_slot}} \parallel \mathrm{seed} \parallel \operatorname{le64}(i))

Şifrələnmiş identifikator qovşusu:

(BFV.Encpk([m0];σ0),,BFV.Encpk([mM];σM)) (\operatorname{BFV.Enc}_{\mathrm{pk}}([m_0];\sigma_0),\ldots, \operatorname{BFV.Enc}_{\mathrm{pk}}([m_M];\sigma_M))

(M=\mathrm{max_input_bytes}).

BFV Affine Backend

bfv-affine-sha3-256-v1 üçün icra vaxtı ilk növbədə BFV açar materialını (s) və (A)dən çıxarır. Alınan ictimai parametrlər zəncirlə bağlı öhdəlik götürülmüş ictimai parametrə tam uyğun olmalıdır.

Əffin dövriyyə toxumları:

σaffine=H(Daffine_circuitspolicy_hashA) \sigma_{\mathrm{affine}} = H(D_{\mathrm{affine\_circuit}} \parallel s \parallel \mathrm{policy\_hash} \parallel A)

Bu toxumdan sürət nümunələri, modulo (t), 32 sıra bir qarışıq dövrü:

yj=bj+iwj,imi(modt),0j<32 y_j = b_j + \sum_i w_{j,i} m_i \pmod t, \qquad 0 \le j < 32

burada (m_i) şifrələnmiş identifikator boşluqlarıdır. Homomorfik olaraq, eyni dəyərni şifrə mətnləri üzərində hesablayır:

Cj=bj+iwj,iCi C_j = b_j + \sum_i w_{j,i} C_i

Çözücü hər birini (C_j) şifrələyir, bütün arxa düz mətn koeficientlərinin sıfır olmasını tələb edir, koefitsiyent-sıfır dəyərlərini baytlara çevirir və formaları:

O=(y0,,y31) O=(y_0,\ldots,y_{31})

Sonra:

opaque_id=H(Daffine_opaquepolicy_hashO) \mathrm{opaque\_id} = H(D_{\mathrm{affine\_opaque}} \parallel \mathrm{policy\_hash} \parallel O)

receipt_hash=H(Daffine_receiptpolicy_hashOopaque_id) \mathrm{receipt\_hash} = H(D_{\mathrm{affine\_receipt}} \parallel \mathrm{policy\_hash} \parallel O \parallel \mathrm{opaque\_id})

BFV Proqramlaşdırılmış Backend

bfv-programmed-sha3-256-v1 üçün ictimaiyyət parametrləri BFV identifikatorunun şifrələmə parametrlərini əlavə edərək gizli proqramı həzmləyir:

program_digest=H(Dprogram_digestN(program)) \mathrm{program\_digest} = H(D_{\mathrm{program\_digest}} \parallel N(\mathrm{program}))

Hələlik RAM-FHE profili aşağıdakılardan ibarətdir:

sahəQiymət
profile_version1
register_count4
memory_lane_count32
ciphertext_mul_per_step1
encrypted_input_moderesolver_canonicalized_envelope_v1
min_ciphertext_modulus(2^{52})

Torii ünvanına göndərilən sadə mətn girişləri icra edilməzdən əvvəl eyni BFV qabığına şifrələnir. Server tərəfindəki şifrələmə üçün müəyyənləşdirilmiş toxum:

H("iroha.ram_lfe.execute.plaintext_bfv.v1"N(program_id)x) H( \texttt{"iroha.ram\_lfe.execute.plaintext\_bfv.v1"} \parallel N(\mathrm{program\_id}) \parallel x )

Xarici olaraq verilən şifrələnmiş giriş üçün həllçi identifikator paltosunu şifləyir və icra edilməzdən əvvəl bu təyinat paltosuna yenidən şifrələyir. Bu kanonikalaşdırma qəbul həşlərini semantik olaraq bərabər BFV şifrə mətnlərində sabit saxlayır.

İlk şifrələnmiş yaddaş zolaqları aşağıdakılardan alınır:

σmem=H(Dprogram_memoryspolicy_hashAle64(0)) \sigma_{\mathrm{mem}} = H(D_{\mathrm{program\_memory}} \parallel s \parallel \mathrm{policy\_hash} \parallel A \parallel \operatorname{le64}(0))

32 yolun hər biri üçün iş vaxtı nümunələri (r_j \in [0,t)) və BFV şifrəli mətni şifrələyən (r_j) saxlayır. Gizli proqram daha sonra şifrələnmiş qeydlər və şifrələnən yaddaş üzərində icra olunur:

TəlimatƏlcəbrə
LoadInput(dst, i)(R_{\mathrm{dst}} \leftarrow C_i)
LoadState(dst, j)(R_{\mathrm{dst}} \leftarrow S_j)
StoreState(j, src)(S_j \leftarrow R_{\mathrm{src}})
LoadConst(dst, a)(R_{\mathrm{dst}} \leftarrow \operatorname{Enc}(a))
Add(dst, a, b)(R_{\mathrm{dst}} \leftarrow R_a + R_b)
AddPlain(dst, src, a)(R_{\mathrm{dst}} \leftarrow R_{\mathrm{src}} + a)
SubPlain(dst, src, a)(R_{\mathrm{dst}} \leftarrow R_{\mathrm{src}} - a)
MulPlain(dst, src, a)(R_{\mathrm{dst}} \leftarrow aR_{\mathrm{src}})
Mul(dst, a, b)(R_{\mathrm{dst}} \leftarrow R_aR_b), sonra yenidən xarakterizə edin
SelectEqZero(dst, cond, z, nz)(R_{\mathrm{cond}}) şifrələmək; sıfır olduğu zaman (R_z) seçin, əks halda (R_{nz}).
Output(src)(R_{\mathrm{src}}) buraxılış qeydiyyatının siyahısına əlavə edin.

Təlimat bantı bitdikdən sonra həllçi hər bir çıxışı qeydini şifrələyir, sıfır koeficientini baytə çevirir və bu baytları birləşdirir:

O=bytes(Dec(Ro0)0,,Dec(Rok)0) O = \operatorname{bytes}(\operatorname{Dec}(R_{o_0})_0,\ldots, \operatorname{Dec}(R_{o_k})_0)

Ümumi proqramlaşdırılmış backend hashləri:

opaque_hash=H(Dprogram_opaquepolicy_hashO) \mathrm{opaque\_hash} = H(D_{\mathrm{program\_opaque}} \parallel \mathrm{policy\_hash} \parallel O)

receipt_hashprogram=H(Dprogram_receiptpolicy_hashOopaque_hash) \mathrm{receipt\_hash}_{\mathrm{program}} = H(D_{\mathrm{program\_receipt}} \parallel \mathrm{policy\_hash} \parallel O \parallel \mathrm{opaque\_hash})

Varsayılan proqramlaşdırılmış identifikator lentində 64 giriş boşluğu var. Hər bir boşluq üçün (i) giriş boşluğunu yükləyir, yaddaş zolağını (i \bmod 32) yükləyir və nəticəni verir:

R0Ci,R1Simod32,R2R0+R1,Output(R2) R_0 \leftarrow C_i,\qquad R_1 \leftarrow S_{i\bmod 32},\qquad R_2 \leftarrow R_0 + R_1,\qquad \operatorname{Output}(R_2)

Çıxış həşləri və rəsmlər

Ümumi RAM-LFE icra qəbulu xalisini imzalamır.

output_hash=H(DoutputO) \mathrm{output\_hash} = H(D_{\mathrm{output}} \parallel O)

Torii RAM-LFE icra reseptləri üçün, əlaqəli məlumatlar kanonik proqram identifikator baytlarıdır:

A=N(program_id) A = N(\mathrm{program\_id})

associated_data_hash=H(A) \mathrm{associated\_data\_hash}=H(A)

İmzalanmış rəsm yükü:

R=(program_id,program_digest,backend,verification_mode,output_hash,associated_data_hash,executed_at_ms,expires_at_ms) R = (\mathrm{program\_id}, \mathrm{program\_digest}, \mathrm{backend}, \mathrm{verification\_mode}, \mathrm{output\_hash}, \mathrm{associated\_data\_hash}, \mathrm{executed\_at\_ms}, \mathrm{expires\_at\_ms})

signed rejimi üçün:

attestation=Signresolver(N(R)) \mathrm{attestation} = \operatorname{Sign}_{\mathrm{resolver}}(N(R))

Verifikasiya imzanı resolver_public_key ilə yoxlayır və bu bərabərliklərin hamısı aşağıdakıları təsdiqləməsə, qəbulu rədd edir:

R.program_id=policy.program_id R.\mathrm{program\_id} = \mathrm{policy.program\_id}

R.backend=policy.backend R.\mathrm{backend} = \mathrm{policy.backend}

R.verification_mode=policy.verification_mode R.\mathrm{verification\_mode} = \mathrm{policy.verification\_mode}

R.program_digest=policy.public_parameters.hidden_program_digest R.\mathrm{program\_digest} = \mathrm{policy.public\_parameters.hidden\_program\_digest}

R.associated_data_hash=H(N(policy.program_id)) R.\mathrm{associated\_data\_hash} = H(N(\mathrm{policy.program\_id}))

İstifadəçi output_hex təqdim edərsə, yoxlayıcı həmçinin aşağıdakıları yoxlayır:

H(Doutputbytes(output_hex))=R.output_hash H(D_{\mathrm{output}} \parallel \operatorname{bytes}(\mathrm{output\_hex})) = R.\mathrm{output\_hash}

proof rejimi üçün attestasiya imzanın əvəzinə sübut qovşusunu daşıyır. Verifikasiya sübutun arxa sonunun, dairə idinin, ictimai giriş sxeminin hashinin, yoxlama açarının və açıq ictimaiyyət nümunələrinin sübut təsdiqçisi metadata və kodlanmış resept-payload hashinə uyğun olub olmadığını yoxlayır.

hR=H(N(R))=(h0,,h31) h_R = H(N(R)) = (h_0,\ldots,h_{31})

Gözlənilən ictimai nümunələr dörd bir elementdən ibarət sütundur. (j) sütunda (h_{8j}\ldots h_{8j+7}) baytları, sonra isə 24 sıfır baytlar var:

instancej=h8jh8j+7024,0j<4 \mathrm{instance}_j = h_{8j}\parallel\cdots\parallel h_{8j+7}\parallel 0^{24}, \qquad 0 \le j < 4

İstifadəçi Proyeksiyası

İdentifikator qətnaməsi istifadəçi qarşısında olan qeyri-şəffaf hesab identifikatoru olaraq ümumi arxa səviyyəli opaque_hash istifadə etmir. RAM-LFE çıxışı hashini identifikator xüsusi domenlər vasitəsilə proyekt edir:

opaque_idid=H(Did_opaqueN(program_id)output_hash) \mathrm{opaque\_id}_{\mathrm{id}} = H(D_{\mathrm{id\_opaque}} \parallel N(\mathrm{program\_id}) \parallel \mathrm{output\_hash})

receipt_hashid=H(Did_receiptN(program_id)output_hashopaque_idid) \mathrm{receipt\_hash}_{\mathrm{id}} = H(D_{\mathrm{id\_receipt}} \parallel N(\mathrm{program\_id}) \parallel \mathrm{output\_hash} \parallel \mathrm{opaque\_id}_{\mathrm{id}})

IdentifierResolutionReceipt daha yüksək səviyyəli paylı yükü imzalayır:

I=(policy_id,R,opaque_idid,receipt_hashid,uaid,account_id) I = (\mathrm{policy\_id}, R, \mathrm{opaque\_id}_{\mathrm{id}}, \mathrm{receipt\_hash}_{\mathrm{id}}, \mathrm{uaid}, \mathrm{account\_id})

İmzalanmış şəxsiyyət vəsiqəsi rəsmləri üçün:

attestation=Signresolver(N(I)) \mathrm{attestation} = \operatorname{Sign}_{\mathrm{resolver}}(N(I))

ClaimIdentifier qəbulu yalnız imzanın və ya sübutun etibarlı olduğu halda qəbul edir; Əlavə edilən RAM-LFE icra yükü istinad olunan proqram siyasətinə uyğun gəlir; uaidaccount_id iddia edilən bağlayıcıdır.

İcraat axını

Ümumi RAM-LFE icrası aşağıdakı formada olur:

  1. İdarəetmə və ya operator qeydiyyatı RamLfeProgramPolicy.
  2. Məlumdur ki, sahib polisə əməl edir.
  3. Müştəri Torii-dən ictimai siyasət metadatalarını oxuyur.
  4. Müştəri həllçiyə tam olaraq bir giriş formasını təqdim edir: düz mətn input_hex və ya şifrələnmiş BFV giriş müqaviləsi.
  5. İdarə vaxtı gizli proqramı qiymətləndirir və output_hex, output_hash, opaque_hash, receipt_hashRamLfeExecutionReceipt qaytarır.
  6. Müştəri və ya arxa tərəfdən alınan resept nəşr olunmuş siyasətə uyğun olaraq yoxlanılır, seçim yolu ilə geri qaytarılan output_hex reseptin output_hash hashinə uyğun olub olmadığını yoxlanır.
  7. ClaimIdentifier kimi daha yüksək səviyyəli bir təlimat xam giriş əvəzinə təsdiqlənmiş qəbulu yerləşdirə bilər.

Kimlik Siyasətləri

İdentifikator siyasətləri RAM-LFE -in konkret istifadəsidir. Onlar ümumi proqram siyasətinin üstündə bir biznes ad məkanı və normallaşma qaydalarını əlavə edirlər:

text
RegisterRamLfeProgramPolicy(
  program_id = "phone_team",
  owner = "<POLICY_OWNER>",
  backend = "bfv-programmed-sha3-256-v1",
  verification_mode = "signed",
  commitment = "<HIDDEN_PROGRAM_POLICY_COMMITMENT>",
  resolver_public_key = "<RESOLVER_PUBLIC_KEY>"
)
ActivateRamLfeProgramPolicy(program_id = "phone_team")

RegisterIdentifierPolicy(
  id = "phone#team",
  owner = "<POLICY_OWNER>",
  normalization = "PhoneE164",
  program_id = "phone_team",
  note = "Private phone registration for team dataspace"
)
ActivateIdentifierPolicy(policy_id = "phone#team")

Kimlik təbəqəsi RAM-LFE qəbulu ilə aşağıdakıları bağlayır:

  • policy_id
  • Gizli funksiya ilə əldə edilmiş qeyri-şəffaf identifikator
  • Deterministik receipt_hash
  • Hesabın UAID
  • kanonik account_id
  • Ümumi icra yükü RAM-LFE

İstifadəçiyə yönəlmiş onboarding üçün hesab aliaslarını şəxsi identifikatorlardan ayrı saxlayın. Aliaslar ictimai adlardır; telefon nömrələri, e-poçt ünvanları və oxşar dəyərlər identifikator siyasətləri və qəbulu vasitəsilə axmalıdır.

Torii Yollar

Tətbiqlə üzləşən marşrut ailəsi aktivləşdirildiyi zaman Torii RAM-LFE və identifikator köməkçilərini açıqlayır:

MarşrutMəqsəd
GET /v1/ram-lfe/program-policiesAktiv və qeyri-aktiv RAM-LFE proqram siyasətlərini və ictimai icra metadatalarını göstərin.
POST /v1/ram-lfe/programs/{program_id}/executeinput_hex və ya encrypted_input proqramından bir proqram icra edin və çıxışı hashləri əlavə etməklə dövlətsiz qəbulu qaytarın.
POST /v1/ram-lfe/receipts/verifyBir RamLfeExecutionReceipt nəşr olunmuş siyasətlə müqayisədə yoxlayın və alternativ olaraq output_hex ilə output_hash müqayisə edin.
GET /v1/identifier-policiesİdentifikator siyasətlərini, normalaşdırma rejimlərini, həllçi açarlarını və şifrələnmiş giriş metadatalarını siyahıya alın.
POST /v1/accounts/{account_id}/identifiers/claim-receiptİstifadəçinin ClaimIdentifier daxil edə biləcəyi rüsum buraxın.
POST /v1/identifiers/resolveAktiv tələb mövcud olduqda bağlanmış hesabda normallaşdırılmış identifikator girişini həll etmək.
GET /v1/identifiers/receipts/{receipt_hash}Audit və dəstək vasitələri üçün hesabat hash ilə davamlı bir identifikator tələbini axtarın.

Bu yollara qarşı qurmadan əvvəl hər zaman hədəf qovunun /openapi və ya /openapi.json sənədinə baxın. Mövcudluq nod quruluşundan və şəbəkə profillərindən asılıdır.

Qeydiyyat vaxtı

Torii-nin icra müddəti RAM-LFE torii.ram_lfe.programs[*] altında, program_id ilə tənzimlənir. Hər bir qurulmuş proqram silsilədəki siyasət öhdəliklərinə uyğun olmalıdır və qəbulu qiymətləndirmək və təsdiq etmək üçün lazım olan icra müddətli materialı təmin etməlidir. İdentifikator marşrutları bu eyni icra vaxtını yenidən istifadə edir; onlar ayrı bir identifikator-qətnamə həlləri quruluş səthini tələb etmirlər.

Siyasətlərin silsilədə qeydiyyatı təkcə kifayət deyil. Hədəf qovşağı həmçinin marşrut ailəsini aşkar etməlidir və həyata keçirəcəyi gözlənilir proqramlar üçün uyğun işləmə vaxtı materialına malik olmalıdır.

İşəgötürmə gərginliyi

  • Siyasətləri aktiv olmayan qaydada qeyd edin, ictimai metadataları yoxlayın və sonra onları aktivləşdirin.
  • Qiymətləndiricinin sirlərini, həllçi imzalanma açarlarını və BFV gizli materialları sənədlərdən, qeydlərdən, əməliyyatlardan və müştəri paketlərindən gizlət.
  • Xüsusi identifikatorları hesab aliaslarına, əməliyyat metadatalarına, hadisələrə və ya dünya dövlətləri sahələrinə yerləşdirməyin.
  • SDK təsdiqləyicini aşkar edərkən daha yüksək səviyyəli göstərişlər göndərmədən əvvəl müştərinin tərəfində qəbulu yoxlayın.
  • Müvəqqəti qəzetlərin əbədi olaraq qalmaması lazım olan müddətdən sonrakı sahələrdən istifadə edin.
  • Yeni bir proqram və ya identifikator siyasətini qeydiyyatdan keçərək, müştərilərin köçürülməsi və yeni qəbulu axdıqdan sonra köhnə siyasəti söndürməklə fırlanın.