Skip to content

RAM-LFE

RAM-LFE - кездейсоқ қолжетімділік машинасының лаконикалық функциясын бағалау. Iroha - бұл мемлекеттік саясаты желіде болатын, бірақ бағалаушы логикасы, құпия немесе шикі кірісі әлемдік мемлекетке жазылуға тиіс емес бағдарламаларға арналған жалпы жасырын-функция қабат. Ол SORA Nexus жеке телефон немесе электрондық пошта іздеуі сияқты сәйкестендіру ағындарымен пайдаланылады, сондай-ақ түйін профилі қолданбаға қарасты бағыттарды мүмкіндік берген кезде жалпы Torii бағдарламаны орындау көмекшісі ретінде таныстырылуы мүмкін.

Сабақ саясаттың міндеттемелері мен қолхаттарды тексеру метамәдени деректерін сақтайды. Резолютор немесе Torii орындау уақыты жасырын бағдарламаны бағалайды, рұқсат етілген шығыстарды ғана қайтарады және клиенттер, қолдау құралдары немесе баспа нұсқаулары тіркелген саясатпен салыстырғанда тексере алатын қолхатты қосады.

Атау

Атаудың бөлінісі маңызды:

МерзіміМағынасы
ram_lfeСыртқы жасырын функция абстракциясы: бағдарлама саясаты, міндеттемелері, орындалу квитанциялары және квитанция тексеру режимі.
BFVБракерски/Фан-Веркаутерен хомоморфтық шифрлау схемасы RAM-LFE шифрланған кіріс пішіндері арқылы қолданылады.
ram_fhe_profileBFV -программаланған шифрланған орындалу машинасы үшін арнайы метамәдени деректер. Бұл RAM-LFE үшін екінші атау емес.

Мәлімет үлгісінде RamLfeProgramPolicy және RamLfeExecutionReceipt RAM-LFE типтері болып табылады. BFV параметрлері, шифрлы мәтін конверттері және жасырын RAM-FHE бағдарлама профилі саясатта қолданылатын шифрланған орындалу артқа жатады.

Жазбалар

RAM-LFE бағдарламасының саясаты program_id бойынша әлемдік деңгейде тіркеледі.

  • саясатты белсендіруге, сөндіруге немесе өзгеше түрде өзгертуге мүмкіндік беретін меншік иесі тіркелгісі
  • клиенттерге жарнамаланған артқы аяқ
  • signed немесе proof түсімді тексеру режимі
  • жасырын бағдарламаның метамәліметтері мен бағалаушының құпиясы туралы міндеттеме
  • қол қойылған квитанциялар үшін шешушінің мемлекеттік кілті
  • BFV параметрлері және ram_fhe_profile сияқты мемлекеттік шифрланған кіріс метамәдени деректері;
  • active белгісі, ол полистің жаңа квитанциялар шығара алатынына бақылау жасайды

Құпия құпия, ашық мәтін сәйкестендіру мәні және жасырын бағдарламалық дене әлемдік күйде сақталмайды. Клиенттер міндеттемелерді, мөлдірсіз хэштерді, қабылдау хэштерін, шифрлы мәтінді және бағдарламаның дигеттерін мөлдір емес протоколдық мәндер ретінде қарауы керек..

Алдыңғы ойлар

Қазіргі уақытта RAM-LFE қолдау үш тылсымдық идентификаторға негізделген:

Қалпына келтіруПайдалану
hkdf-sha3-512-prf-v1Міндеттілікпен байланысты PRF бағалау.
bfv-affine-sha3-256-v1BFV шифрланған сәйкестендіру орындары бойынша құпия аффиналық бағалау.
bfv-programmed-sha3-256-v1BFV қолданатын шифрланған тіркелгілер мен есту жолдары арқылы бағдарламалық орындалу.

Идентификатор саясаты үшін BFV бағдарламаланған бэкэнд маңызды заманауи жол болып табылады. Бұл қоршауларға жергілікті түрде қалыпқа келтірілген кірісті шифрлауға мүмкіндік береді, шешушіге транзакциядағы қоғамдық идентификаторды көрместен бағалауға мүмкіндік береді, және шығыс хэшін тіркелген бағдарлама саясатына байланыстыратын квитанцияны қайтарады.

Математика

Бұл бөлім ағымдағы RAM-LFE коды пайдаланатын іске асыру деңгейіндегі алгебраны сипаттайды. Ол қауіпсіздік дәлелі емес; бұл саясаттар, түсімдер және клиенттер келісуі тиіс детерминистік транскрипт және шифрланған бағалау моделі.

Нотация

Келесі:

  • (H(m)) Iroha Hash::new(m): Blake2b-32 үстінде m, соңғы байттың ең аз мәнді біті 1 болып табылады.
  • (N(x)) x каноникалық Norito кодтамасы болып табылады.
  • (a \parallel b) байт-баяқ конкаценациясы.
  • (\operatorname{le64}(i) ) белгісіз бүтін санның 8-байтты шағын енді кодтау болып табылады.
  • (s) сыртқы әлем мемлекетінің құпиясын шешуші болып табылады.
  • (P) мемлекеттік саясаттың параметрлері болып табылады.
  • (A) тиісті деректерді сұраңыз.
  • (x) қалыпты кіріс байттары немесе Norito кодталған шифрланған кіріс қапшығы болуы керек, бұл артқа байланысты.

RAM-LFE доменге бөлінетін хештарды пайдаланады. Төмендегі формулалар домендерді мақсат бойынша атайды; олардың ағымдағы байт жіптері:

СимволДомен тізбегі
(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

Саясаттық міндеттеме

Политикалық міндеттемелер қоғамдық параметрлерді және жасырын шешуші құпияны біртіндеп бекітеді.

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

Содан соң толық саясаттың көшірмесі кодталады:

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

және жарияланған саясатты таңбалау:

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

Сылбырдағы PolicyCommitment - мынадай:

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

Бағалау орындалу уақытының құпиясынан бірдей мәнді қайта есептейді. Егер қайта есептелген хаш әртүрлі болса, бағалау міндеттемелердің сәйкессіздікпен сәтсіз болады.

HKDF-SHA3-512 Қалпына келтіру

hkdf-sha3-512-prf-v1 үшін шығыс - қалыпқа келтірілген кірістің өзі, бірақ мөлдір емес идентификатор мен қолхат хашисі құпия байланыстағы PRF шығыстар.

Өтiнiштiң көшірмесі:

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

HKDF тұз және псевдореандомий кілті:

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)

Өткінші материал кеңейтіліп, шешеленеді:

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)

Қабылдау материалы ашық емес ID-ді бұдан басқа байлайды:

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})

Аяқтауыш қайтарады:

(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 Түйінді

BFV - торға негізделген гомоморфтық шифрлау схемасы. "Гомоморфты" дегеніміз, бағдарлама шифрланған мәндерді қосуы және көбейтуі мүмкін және шифрлаудан кейін ол жай мәтіндік мәндердегі қосылулар мен көбейтулерді орындағандай нәтижеге ие болады.

RAM-LFE үшін BFV шифрланған кіріс тетігі ретінде қолданылады:

  1. Қапсық телефон нөмірі немесе электрондық пошта адресі сияқты жеке құндылықты қалыпқа келтіреді.
  2. Қапсық байттарды кішкентай бүтін сандық ұңғымаларға айналдырады.
  3. Әрбір ұяшықты шешушінің BFV қоғамдық кілтімен шифрланады.
  4. Резолютордың орындалу уақыты жасырын бағдарламаны осы шифрлы мәтіндерге қарап бағалайды.
  5. Орындалу уақыты жасырын бағдарламаның шығысын ғана шифрлайды және қолтаңбалар немесе квитанция дәлелдейді.

BFV нақты бүтін сандар арифметикалық емес, шамамен арифметика. Сол себепті ол идентификатор байт және шағын модульдік Есептеулерге қарағанда, жылжымалы нүктелік модельді қорытындылауға. Iroha Ағымдағы BFV пайдалану, әрбір шифрланған ұяшықта бір скалярлық мәнді модулі бар (t), әдетте байт немесе байт ұзындығы өріс. шифрлы мәтіннің өзі әлдеқайда үлкен бүтін санның модульінде тұрады (q). Арадағы айырмашылық (q) және (t) шифрлау мен гомоморфтық операциялар енгізетін шу үшін шифрлау кеңістігін береді.

BFV шифрлы мәтіннің екі көптік құрамдас бөлігі бар:

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

Құпия кілті тағы бір көптік (s_k). Шифрлау компоненттерді біріктіреді:

v=c0+c1sk v = c_0 + c_1s_k

Егер шифрлы мәтін дұрыс қалыптасқан болса және шуы әлі де жеткілікті аз болса, (v) масштабталған қарапайым мәтінге жақын болады. Дөңгелектеу қарапайым мәтінді коэффициентті modulo (t) қалпына келтіреді. Пайдалы қасиет - шифрлы текст операциялары осы құрылымды сақтап қалуы:

Қарапайым жұмысШифрлы мәтін операциясы
(m+n)Шифрлы мәтін компоненттерін қосу.
(m+\alpha)(c_0) дегенге масштабталған жазық мәтін тұрақтысын қосу.
(\alpha m)Шифрлы мәтін компоненттерінің екеуін де (\alpha) бойынша масштабтау.
(mn)Шифрлы мәтін көптікшелерін көбейтіңіз, қайта масштабтаңыз, содан кейін қайта сызықтандырыңыз.

Көбейту - бұл қымбат операция. Екі екі құрамдас шифрлы мәтіннің өнімі табиғи түрде (1), (s_k) және (s_k^2) арқылы шифрланған үш құрамдас мәтінді жасайды. Релинеаризация (s_k^2) терминін қалыпты екі құрамдас шифрлы мәтінге орату үшін жарияланған бағалау кілтісін пайдаланады. Бұл келесі қосылулар мен көбейтулерді бірдей шифрлы текст пішінімен сақтайды.

BFV Сонымен қатар, әрбір шифрланған операция белгілі бір шу бюджетіне жұмсалады. Бұл іске асыру осы бюджетті жаңарту үшін шифрлы мәтіндерді бастамайды. Қайта, RAM-LFE кішігірім ram_fhe_profile параметрлер жиынтығының қолданатын тереңдігі ішінде бағалауды сақтайтын. Уақытша бағдарламаланған профиль тұрақты тіркелгі санын, тұрақты есту жолын санауға мүмкіндік береді, және ең көп дегенде, әрбір бағдарламаланған қадамға бір шифрлы мәтін-шифрлы мәтінді көбейту.

Бұл RAM-LFE дизайн, BFV транзакцияны тек қана көретін бақылаушылардан және қоғамдық кітапша деректерінен клиенттің кірісін жасырады немесе бағыттағы пайдалы жүк. Бұл шынжыр кездейсоқ шифрланған бағдарламаларды орындайды дегенді білдірмейді. Torii шешушінің орындалу уақыты әлі күнге дейін BFV құпия материалды иеленеді, конфигурацияланған жасырын бағдарламаны бағалайды. рұқсат етілген шығаруды шифрлайды және нәтижесін куәландырады. Содан кейін бухгалтерлік есеп желідегі саясат міндеттемесіне қатысты куәландыруды тексереді және қоғамдық кілттің немесе дәлелдеудің метамәдени деректерін шешетін болады.

Идентификаторды пайдалану жағдайында қарапайым бейнелеуді мақсатты түрде таңдап алады. Нормалданған жіп:

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

Әрбір элемент өзінің BFV скалярлық шифрлы мәтіні ретінде шифрланады. Бұл пішін қалыпқа келтіруді және конверттің расталуын айқын етеді, қоршауларға қоғамдық параметрлерден шифрланған сұрау салуларды құруға мүмкіндік береді және ресейнерге тұрақты қолхат транскриптіне сәйкес шифрланған кірістерді канонизациялауға мүмкіндік береді.

BFV Жылжымалы үлгісі

BFV артқы аяқтарда негацикликалық полиномиялық сөйлем қолданылады:

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

және ашық мәтінді балдақ:

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

мұнда:

  • (n) - polynomial_degree, екі қуаттылық
  • (q) - ciphertext_modulus
  • (t) - plaintext_modulus
  • (q > t) және (t \mid q)
  • (\Delta = q/t)
  • (B = 2^{\mathrm{decomposition_base_log}})

Қара мәтін коэффициентінің векторлары әр коэффициентті масштабтау арқылы кодталады:

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

Декрипторлық орталық көтерілістер әр коэффициентінің:

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

содан кейін оны (R_t) деп қайта айналдырады:

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

Мұнда (s_k) BFV құпия кілті көптіксі, сыртқы RAM-LFE шешуші құпиясы (s) емес.

BFV Кілтті ұрпақ

Шифрланған сәйкестендіруші кірісі үшін BFV кілті материалы шешушінің құпиясы мен оған байланысты деректері бойынша анықталады:

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

BFV RNG тұқымы мынадай түрде себіледі:

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

Басты генератор үлгілері:

  • (s_k \in {-1,0,1}^n), Modulo (q) деп көрсетілген
  • (a \leftarrow R_q) бірыңғай
  • (e \in {-1,0,1}^n)

Қоғамдық кілті:

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

Қайта линейлендіру үшін (s_k^2) ыстық өнім болуы (R_q). Әрбір база үшін...(B) цифрлы (j), үлгісі (a_j) біркелкі және (e_j) кішкентай таралудан кейін жариялайды:

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

Қоғамдық BFV саясаттың метамәдени деректері (((n,q,t,B)), қоғамдық кілті және max_input_bytes. BFV құпия кілті мен релинейкалау кілті шешушінің орындалу уақытында тұрады.

BFV Шифрлау және операциялар

Ашық мәтін көптікшесін (m) шифрлау үшін іске асырушы келесіден басқа ChaCha20 RNG тұқымдарды жегізеді:

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

Ол (u,e_1,e_2 \in {-1,0,1}^n) үлгілерін алып, мыналарды есептейді:

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

Шифрлы мәтін (c=(c_0,c_1)).

Гомоморфтық қосылу компоненттер бойынша:

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

Тек (c_0) коэффициентінің нөлдік өзгеруіне жай мәтінді масштабты (\alpha) қосу:

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

Ашық мәтіннің масштабы (\alpha) арқылы көбейту екі құрамдас бөліктерді де өлшеуіш:

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

Екі шифрлы мәтін үшін (c=(c_0,c_1)) және (d=(d_0,d_1)), шифрлы текст көбейтуі алдымен үш өлшемді шифрлық мәтінді есептеп береді және әрбір коэффициентті (t/q) арқылы қайтарады:

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

Жоғарыда келтірілген өнімдердің барлығы (R_q) дегендегі негацикликалық дөңгелек өнімдері болып табылады. Содан кейін (\tilde c_2) базалық-(B) көптікшелерге бөлініп тасталады:

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

және қайта тіктелген:

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

Нәтижесінде қайтадан екі компонентті BFV шифрлы мәтін пайда болады.

Идентификатор шифрлау мәтіні конверті

Идентификатордың кіріс байт жиегі:

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

Скаларлы ұяшықтарға шифрланған:

m0= m_0 = \ell

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

және қалған барлық ұңғымалар max_input_bytes + 1 -ға дейін нөлді құрайды. Әр scalar ұңғымасы коэффициенті нөлдік жай мәтінді көптікше ([m_i]) болып шифрланады.

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

Шифрланған идентификаторлық конверт:

(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 Афиналық біртіндеп

bfv-affine-sha3-256-v1 үшін орындау уақыты ең алдымен BFV негізгі материалдан (s) және (A) алынады. Алынған қоғамдық параметрлер шынжырда жасалған мемлекеттік параметрлерге дәл сәйкес келуі тиіс.

Афиналық схеманың тұқымы:

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

Осы тұқымнан жұмыс уақытының үлгілері, modulo (t), 32 қатарлы афиналық схема:

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

мұнда (m_i) шифрланбаған сәйкестендіру ұяшықтары болып табылады. Гомоморфтық түрде ол шифрлы мәтіндер бойынша бірдей мәнді есептейді:

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

Резолютор әрқайсысын (C_j) шифрлайды, барлық артта тұрған жазық мәтін коэффициенттерінің нөлдік болуын талап етеді, коэффициент - нөлдік мәндерді байтқа айналдырады және былай деп қалыптастырады:

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

Содан кейін:

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 Бағдарламаланған артқа өту

bfv-programmed-sha3-256-v1 үшін қоғамдық параметрлер BFV идентификаторының шифрлау параметрлерін қоса алғанда, жасырын бағдарламаны алмастыруды қамтитын:

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

Ағымдағы RAM-FHE профилі:

ӨрістеБағасы
profile_version1
register_count4
memory_lane_count32
ciphertext_mul_per_step1
encrypted_input_moderesolver_canonicalized_envelope_v1
min_ciphertext_modulus(2^{52})

Torii -ға жіберілген қара мәтін кіруі орындалғанға дейін BFV қапшығына шифрланады. Сервер жағындағы шифрлау үшін детерминистік тұқым:

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 )

Сыртқы түрде берілген шифрланған кіріс үшін шешуші идентификатор қапшығын шифрлайды және орындаудан бұрын оны осы детерминистік қапшыққа қайта шифрлайды. Бұл каноникализация BFV шифрлы мәтіндер бойынша семантикалық тең қабылдау хэштерін тұрақты ұстайды.

Бастапқы шифрланған есту жолақтары мыналардан алынған:

σ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 жолдың әрқайсысы үшін (r_j \in [0,t)) орындалады және BFV шифрлы мәтіннің (r_j) шифрлауын сақтайды. Содан кейін жасырын бағдарлама шифрланған реестрлер мен шифрланған жады арқылы орындалады:

НұсқаулықАлгебра
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}(а) )
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), содан кейін қайта тізбелдеңіз
SelectEqZero(dst, cond, z, nz)(R_{\mathrm{cond}}) шифрлансын; егер ол нөл болса, (R_z) таңдаңыз, әйтпесе (R_{nz}).
Output(src)(R_{\mathrm{src}}) шығыс тіркелгісі тізіміне қосу.

Нұсқаулық таспасы аяқталғаннан кейін резульвер әрбір шығыс тіркелімін шифрлайды, нөлдік коэффициентті байтқа айналдырады және сол байттарды қосып қояды:

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

Әдеттегі бағдарламалық бэкэнд хэштегтері:

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})

Әдеттегі бағдарламаланған сәйкестендіру лентасында 64 кіріс ұясы бар. Әрбір ұяшығы үшін (i), ол кіріс ұйынын жүктейді, жады жолын жүктейді (i \bmod 32), оларды қосып, нәтиже береді:

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)

Өндіріс шешелері мен квитанциялары

Жалпы RAM-LFE орындалу квитанциясы шикі шығысқа қолтаңбаланбайды. Ол шығыс хэшігіне қол қояды:

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

Torii RAM-LFE орындалу квитанциялары үшін байланысты деректер - каноникалық бағдарлама идентификаторы байттар:

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

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

Қол қойылған квитанция жүктемесі:

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 режимі үшін:

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

Тексеру resolver_public_key арқылы қолтаңбаны тексереді және осы теңдіктердің бәріне сәйкес болмаса, квитанцияны қабылдамайды:

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}))

Егер шақырушы output_hex ұсынса, тексеруші сондай-ақ:

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

proof режимі үшін куәландыру қолтаңбаның орнына дәлелдеме конвертімен жүреді. Тексеруде дәлелдеме артқасы, схема идентификаторы, қоғамдық кіріс схемасы хэшігі, тексеру кілті хэшігі және ашық қоғамдық инстанциялар дәлелдеме тексерушінің метамәліметтері мен кодталған квитанция-пайлық жүктеме хэшігіне сәйкес кететіні тексеріледі. Келіңіз:

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

Күтілетін қоғамдық үлгілер төрт бір элементтен тұратын баған болып табылады. (j) бағанында (h_{8j}\ldots h_{8j+7}) байттары болады, содан кейін 24 нөлдік байттар болады:

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

Идентификаторлық проекция

Идентификаторды шешу opaque_hash пайдаланушы бетіндегі мөлдір емес тіркелгі идентификаторы ретінде жалпы біртіндепін пайдаланмайды. Ол RAM-LFE шығыс хэшін идентификаторға тән домендер арқылы проекциялайды:

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 жоғары деңгейдегі пайдалы жүкті қол қояды:

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})

Қол қойылған сәйкестендіру квитанциялары үшін:

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

ClaimIdentifier қолтаңба немесе дәлел жарамды болғанда ғана квитанцияны қабылдайды, кіріктірілген RAM-LFE орындалу жүктемесі көрсетілген бағдарлама саясатына сәйкес келеді және uaid мен account_id талап етілетін міндеттілік болып табылады.

Орындалу ағыны

Жалпы RAM-LFE орындалуы мынадай пішінге ие:

  1. Басқарушылық немесе операторлық тіркелімдер RamLfeProgramPolicy.
  2. Иесі полиспен айналысады.
  3. Тапсырыс беруші Torii мемлекеттік саясаттың метамәдени деректерін оқиды.
  4. Клиент шешушіге дәл бір кіріс нысанын ұсынады: қара мәтін input_hex немесе шифрланған BFV кіріс конверті.
  5. Жарату уақыты жасырын бағдарламаны бағалайды және output_hex, output_hash, opaque_hash, receipt_hash және RamLfeExecutionReceipt қайтарады.
  6. Тапсырыс беруші немесе т.б. қолхатты жарияланған саясатқа сәйкес тексеріп, кері қайтарылған output_hex квитанцияның output_hash квитанциясына жатқызылғанын тексеруге болады.
  7. Жоғары деңгейдегі нұсқаулық, мысалы ClaimIdentifier, шикі кірісті енгізудің орнына куәландырылған квитанцияны қосқанда болады.

Идентификатор саясаты

Идентификатор саясаты RAM-LFE нақты қолданылуы болып табылады. Олар жалпы бағдарламалық саясаттың үстіне бизнес атау кеңістігі мен қалыптау ережесін қосады:

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")

Идентификатор қабаты RAM-LFE квитанциясын пайдалана отырып:

  • policy_id
  • жасырын функциядан алынған ашық емес идентификатор
  • детерминистік receipt_hash
  • есепшоттың UAID
  • Канондық account_id
  • жалпы RAM-LFE орындау пайдалы жүктемесі

Пайдаланушы бетпе-бет қосылу үшін жеке идентификаторлардан бөлек тіркелгі аты-жөндерін сақтаңыз. Алты атаулар қоғамдық есімдер; телефон нөмірлері, электрондық пошта мекенжайлары және ұқсас құндылықтар сәйкестендіру саясаттары мен квитанциялар арқылы өтуі керек.

Torii Жолдар

Қолданбаға қарасты маршрут отбасы рұқсат етілген кезде, Torii RAM-LFE және сәйкестендіруші көмекшілерді:

ЖолыМақсаты
GET /v1/ram-lfe/program-policiesБелсенді және белсенді емес RAM-LFE бағдарламалық саясатты және мемлекеттік орындау метамәдени деректерін тізімі.
POST /v1/ram-lfe/programs/{program_id}/executeinput_hex немесе encrypted_input бағдарламасынан бір бағдарламаны орындаңыз және шығыс хэштегін қайтарыңыз және мемлекеттік емес квитанция.
POST /v1/ram-lfe/receipts/verifyRamLfeExecutionReceipt жарияланған саясатпен салыстырғанда тексеріңіз және output_hex мен output_hash салыстыруды таңдаңыз.
GET /v1/identifier-policiesИдентификатор саясатын, нормализациялау режимдерін, шешуші кілттерін және шифрланған кіріс метамәліметтерін тізімі.
POST /v1/accounts/{account_id}/identifiers/claim-receiptПайдаланушы ClaimIdentifier тегістей алатын квитанцияны шығару.
POST /v1/identifiers/resolveБелсенді талап бар болған кезде байланысты шотқа нормаландырылған идентификаторды енгізуді шешу.
GET /v1/identifiers/receipts/{receipt_hash}Тексеру және қолдау құралдары үшін квитанция хэш арқылы тұрақты идентификаторды іздеңіз.

Бұл бағыттармен салыстырғанда әрдайым мақсатты түйіннің /openapi немесе /openapi.json құжатын тексеріңіз. Қолжетімділік түйін құрылымы мен желі профиліне байланысты.

Ұяшықтағы жұмыс уақыты

Torii үдерісіндегі орындау уақыты RAM-LFE torii.ram_lfe.programs[*] деп құрылады, оған program_id белгісі қойылады. Әрбір конфигурацияланған бағдарлама желідегі саясаттың міндеттемесіне сәйкес келуі тиіс және түсімдерді бағалау мен растау үшін қажетті жұмыс уақытын қамтамасыз етуі керек. Идентификатор бағыттары осы жұмыс уақытын қайта пайдаланады; оларға жеке идентификатор-резульвер конфигурациясы беті қажет емес.

Политиканы тізбекке тіркеу өздігінен жеткіліксіз. Мақсатты түйін сонымен қатар маршрут отбасын ашады және оның орындауы күтiлетiн бағдарламалар үшін сәйкес келетiн орындау уақыты материалдары болуы керек.

Операциялық күзет рельстері

  • Политиканы белсенді емес тіркеу, қоғамдық метамәліметтерді тексеру, содан кейін оларды қосу.
  • Бағалаушының құпияларын, шешуші қолтаңбалау кілттерін және BFV құпия материалдарды құжаттардан, журналдардан, транзакциялардан және клиент топтамаларынан жасыру.
  • Тіркелгілердің аты-жөндеріне, транзакция метамәліметтеріне, оқиғаларға немесе әлемдік мемлекет өрістеріне шикі атауларды қосуға болмайды.
  • SDK растаушыны ашқан кезде жоғары деңгейдегі нұсқауларды тапсырудан бұрын клиент тарапынан түбіртектерді тексеру.
  • Ескірген квитанциялар мәңгілікке жарамды болмауы тиіс мерзімі өткен өрістерді пайдаланыңыз.
  • Жаңа бағдарламаны немесе сәйкестендіру саясатын тіркеу, клиенттерді көшіру және жаңа түсімдер ағылған кезде ескі саясатты өшіру арқылы айналдырыңыз.