# Variations of Cryptosystem > 資料來源:NCKU 李南逸教授之**密碼學**課程-密碼學應用 2。 ## Homomorphic Encryption :::info 本人專題題目,故不詳細記錄。 ::: ### Concept ![圖片](https://hackmd.io/_uploads/S1MvmQnRC.png =50%x) 舉個例子:在公司上班薪水很高,老闆今天想幫大家加薪,但他不想讓每個人知道其他人加了多少薪,一般的加解密系統沒辦法「還原亂碼」,而同態加密可以。 > 缺點是複雜度高、效率不佳。 ### Simple Homomorphic Encryption Example ![圖片](https://hackmd.io/_uploads/SyMyEQ3RC.png =60%x) 應用情境:投票機制。 ### Homomorphic Encryption Algorithms ![圖片](https://hackmd.io/_uploads/HJoX4mh0A.png =70%x) > 老師不熟 GM、Benaloh。 注意:ElGamal 是乘法同態,老師寫錯。 - 分「加法同態」及「乘法同態」。 > 若符合其中一個,稱「**半**同態加密」;都符合,則稱「**全**同態加密」。 - 右邊那串例子是 RSA,為乘法同態加密。 ### ElGamal Scheme #### Key Generation ![圖片](https://hackmd.io/_uploads/rJpYNQ2CR.png =60%x) #### Encryption ![圖片](https://hackmd.io/_uploads/rk424XhRR.png =60%x) #### Decryption ![圖片](https://hackmd.io/_uploads/B116EmnAA.png =60%x) #### Multiplicative Homomorphic ![圖片](https://hackmd.io/_uploads/HkSmrQ3RA.png =80%x) ### Paillier Scheme > 可參照 [Intel 的 Intel Paillier Cryptosystem Library](https://github.com/intel/pailliercryptolib_python)。 其有提到關於金鑰長度:For increased security, typically the key length is at least 1024 bits, but recommendation is 2048 bits or larger. >深入查詢,現今主要流行 1024-bit 的金鑰長度,但自從 2009 年編號為 RSA-768(768 bits, 232 digits)數被成功分解後,普遍會建議將金鑰長度設置到 2048-bit 以上。 #### Key Generation ![圖片](https://hackmd.io/_uploads/Hk6hrX20A.png =60%x) #### Encryption / Decryption ![圖片](https://hackmd.io/_uploads/Sy81LXh0C.png =80%x) #### Proof ![圖片](https://hackmd.io/_uploads/HkVmI7hAR.png =80%x) #### Additive Homomorphic ![圖片](https://hackmd.io/_uploads/HJWc8mhAA.png =60%x) ## Threshold Cryptosystem ### Threshold Cryptosystem (2, 3) ![圖片](https://hackmd.io/_uploads/B1xKuXhAC.png =70%x) 1. Alice 建立訊息 2. Alice 加密 - Alice 使用門檻加密法將訊息加密。 - 此加密過程會將加密結果分成多個密鑰分享(Decrypt Share),並分發給多個成員(Bob、Carol 和 Dave)。 3. Bob, Carol, Dave - 這三位成員各自獲得一份密鑰分享,稱為 Decrypt Share。 - 即使他們個別持有自己的密鑰分享,但自己無法解密訊息。 4. Threshold Decrypt - 當有至少兩個成員(如 Bob 和 Carol)提供他們的 Decrypt Share 時,門檻解密機制可以被觸發,並使用這兩個 Shares 來成功解密訊息。 ### Shamir Secret Sharing Scheme (Lagrange Interpolation) 基於拉格朗日插值多項式的數學原理。 允許將一個秘密(如密鑰)拆分成若干個部分,並分配給不同的成員。 當足夠多的成員(至少門檻數)共同合作時,則可以恢復這個秘密。 #### Secret Sharing Algorithm ![圖片](https://hackmd.io/_uploads/Hy1CY72RC.png =70%x) - `s`:即秘密。 - `n`:將密鑰拆分成 n 份。 #### Reconstruction Algorithm ![圖片](https://hackmd.io/_uploads/B1Ok9X2CC.png =70%x) #### (t, n) Secret Sharing Scheme ![圖片](https://hackmd.io/_uploads/SJJz972RR.png =65%x) - `t`:閾值,至少需要 t 位成員才能重建秘密。 - `n`:將密鑰拆分成 n 份。 Shamir 使用一個次數為 $t−1$ 的隨機多項式(即圖中 $l(X)$)來隱藏這個秘密($s$)。並將不同的 $X$ 值代入多項式 $l(X)$,計算出對應的 $s_i$ 值(即密鑰份額),並將這些 $(X,s_i)$ 的獨特 pairs 分配給不同的成員。 當有至少 $t$ 個成員合作時,就能使用拉格朗日插值多項式(代入使 $l(0)=s$)來重建這個秘密。 ### ElGamal Threshold Cryptosystem #### (t+1, n) threshold cryptosystem ![圖片](https://hackmd.io/_uploads/HJ-I5X2AR.png =70%x) ### Laih-Harn Generalized Threshold Cryptosystem #### Initialization ![圖片](https://hackmd.io/_uploads/S1RdqmnRR.png =60%x) #### Trusted Center ![圖片](https://hackmd.io/_uploads/H1AFq7n00.png =50%x) ![圖片](https://hackmd.io/_uploads/ryDcqQh0A.png =50%x) ![圖片](https://hackmd.io/_uploads/H1lscm20A.png =50%x) #### Encryption $C = M^e(mod\ N)$。 #### Decryption ![圖片](https://hackmd.io/_uploads/HyXeo7nR0.png =50%x) ## Proxy Re-Encryption (PRE) - 代理重加密(簡稱PRE)目的是將「原本加密方(Delegator)透過加密方的密鑰所加密」的密文 $𝐶_a$,經由第三方代理服務,將密文轉換成「由解密方的密鑰加密」的密文 $𝐶_b$。 - 例如**雲端儲存**、**分享資料**的服務,經由 PRE 這樣的加密系統,能更有效率的在一對多、多對多的情況下進行訊息的分享。 - 對於同一個訊息,加密方只需要產生一次密文,再經由 Proxy 和重加密密鑰 𝑟𝑘,就能對不同人產生個別的秘密副本,解密方只需要用自己的密鑰便能解密密文。 - Proxy 在轉換密文的過程中,只會接觸到「密文」跟「重加密」。 - 密鑰,明文訊息跟解密密鑰並不會暴露給第三方。 ### Architecture 如下圖架構: ![圖片](https://hackmd.io/_uploads/BkX-n7nCC.png =70%x) - Proxy 即雲端,其存有**密文**。 - $A\rightarrow B$ 是隨機值。 - 步驟: 1. $C_A$ 2. $rk_{A\rightarrow B}$ 3. $C_B$ - Bob 那邊:$m = Dec(sk_B, C_B)$。 ### Properties - **Directionality** - 如果 Proxy 只能利用 𝑟𝑘 將 $𝐶_a$ 轉成 $𝐶_b$,就是 unidirectional,反之則為 bidirectional。 - **Number of Hops** - 如果 Proxy 能透過不同的 $𝑟𝑘_{a→?}$ 將 $𝐶_a$ 轉換成對應的 $𝐶_?$,則稱為 multi-hop / multi-use,否則稱為 single-hop / single-use。 - **Interactivity** - 如果解密方的密鑰不需參與重加密密鑰的產生過程,則稱為 non-interactive ,否則為interactive。 ### BBS98 Scheme ![圖片](https://hackmd.io/_uploads/S1o7Tm3CC.png =80%x) ![圖片](https://hackmd.io/_uploads/B1cNpmnA0.png =80%x) ### CTR2 Scheme > 基於 ECC。 ![圖片](https://hackmd.io/_uploads/HJe_673CR.png =50%x) ## 補充 ![圖片](https://hackmd.io/_uploads/SkkDAQnC0.png =80%x)