SOCI (secure outsourced computation on integers scheme) provides a twin-server architecture for secure outsourced computation based on Paillier cryptosystem, which supports computations on encrypted integers rather than just natural numbers [1]. It significently improves the computation efficiency compared with fully homomorphic encryption mechanism. SOCI includes a suite of efficient secure computation protocols, including secure multiplication (
The protocols in SOCI are built based on Pailliar cryptosystem with threshold decryption (PaillierTD), which is a variant of the conventional Paillier cryptosystem. PaillierTD splits the private key of the Paillier cryptosystem into two partially private keys. Any partially private key cannot effectively decrypt a given ciphertext encrypted by the Paillier cryptosystem. PaillierTD consists of the following algorithms.
The private key
For brevity, we will omot
PaillierTD has the additive homomorphism and scalar-multipilication homomorphism as follows.
-
Additive homomorphism:
$\textsf{Dec}(sk,[m_1+m_2\mod N])=\textsf{Dec}(sk,[m_1]\cdot[m_2])$ ; -
Scalar-multiplication homomorphism:
$\textsf{Dec}(sk,[c\cdot m\mod N])=\textsf{Dec}(sk,[m]^c)$ for$c\in\mathbb{Z}^*_N$ . Particularly, when$c=N-1$ ,$\textsf{Dec}(sk,[m]^c)=-m$ holds.
The system architecture of SOCI is shown in the figure above, which consists of a data owner (DO) and two servers, i.e., a cloud platform (CP) and a computation service provider (CSP).
- DO: DO takes charge of generating and distributing keys to CP and CSP securely. Specifically, DO calls the
$\textsf{KeyGen}$ algorithm to generate public/private key pair$(pk,sk)$ for Paillier cryptosystem and then splits$sk$ into two partially private keys$(sk_1, sk_2)$ . Next, DO distributes$(pk,sk_1)$ and$(pk, sk_2)$ to CP and CSP, respectively. To protect data privacy, DO encrypts data with$pk$ and outsources encrypted data to CP. Besides, DO outsources computation services over encrypted data to CP and CSP. - CP: CP stores and manages the encrypted data sent from DO, and produces the intermediate results and the final results in an encrypted form. In addition, CP can directly execute certain calculations over encrypted data such as homomorphic addition and homomorphic scalarmultiplication. CP interacts with CSP to perform
$\textsf{SMUL}$ ,$\textsf{SCMP}$ ,$\textsf{SSBA}$ , and$\textsf{SDIV}$ over encrypted data. - CSP: CSP only provides online computation services and does not store any encrypted data. Specifically, CSP cooperates with CP to perform secure computations (e.g., multiplication, comparison, division) on encrypted data.
The project in this version is written in C/C++.
Taken as input a security parameter
Taken as input the private key
The private key
Taken as input a plaintext
Note: mpz_t is a GMP data type which is a multiple precision integer.
Taken as input a ciphertext
Given a ciphertext
Given partially decrypted ciphtexts
Given two ciphertext
Given a ciphertext
Given ciphertexts
Given ciphertexts
Given a ciphertext
Given ciphertexts
- OS: Ubuntu 20.04 LTS.
- make,g++
- GMP
GMP is a free library for arbitrary precision arithmetic, operating on signed integers, rational numbers, and floating-point numbers.
Download GMP from GMP . you can choose “gmp-6.2.0.tar.xz”.
- Unzip it
Click terminal and type
tar -xvf gmp-6.2.0.tar.xz
- Go to gmp-6.2.0
cd gmp-6.2.0
- config
./configure --prefix=/usr --enable-cxx
- make
make
make check
sudo make install
make
./bin/soci
set x = 99, y = 789
run add function, its running time is ------ 0.010000 ms
x + y = 888
---------------------------
set x = 99, y = 789
compute scl_mul function, its running time is ------ 0.018000 ms
x*y = 78111
---------------------------
Secure computation protocols
set x = 99, y = 789
compute SMUL function, its running time is ------ 13.986000 ms
x*y = 78111
---------------------------
set x = 99, y = 789
compute SCMP function, its running time is ------ 7.919000 ms
x>=y? = 1
---------------------------
set x = 99
compute SSBA function, its running time is ------ 21.188000 ms
s_x = 0 u_x = 99
---------------------------
set x = 5429496723, y = 9949672
compute SDIV function, its running time is ------ 742.709000 ms
q = 545 r = 6925483
---------------------------
We used different KEY_LEN_BIT to test the performance of each function. The experimental environment is a laptop with CPU 10th Gen Intel(R) Core(TM) i5-10210U, 2 cores @ 2.70GHz and 2 cores @ 2.69 GHz, and 16G memory. The experimental results are as follows:
Length of key in bit | KEY_LEN_BIT | 256 | 384 | 512 | 640 | 768 | 896 | 1024 |
---|---|---|---|---|---|---|---|---|
PaillierTD Encryption | encrypt | 0.31015 | 0.5553 | 1.21225 | 2.1346 | 3.76635 | 5.97745 | 8.01885 |
PaillierTD Decryption | decrypt | 0.24085 | 0.54355 | 1.2006 | 2.1238 | 3.8087 | 5.73475 | 7.98915 |
Secure Addition | add | 0.0007 | 0.001 | 0.0014 | 0.00205 | 0.0029 | 0.0046 | 0.0045 |
Secure Scalar Multiplication | scl_mul | 0.0146 | 0.0245 | 0.0374 | 0.0529 | 0.0775 | 0.11135 | 0.1269 |
Secure Multiplication | SMUL | 2.0798 | 5.6713 | 12.12965 | 20.92335 | 37.91795 | 54.50355 | 82.22075 |
Secure Comparison | SCMP | 0.9691 | 2.87705 | 6.0354 | 10.9546 | 18.1335 | 28.78905 | 40.70935 |
Secure Sign Bit-Acquisition | SSBA | 2.8683 | 8.49485 | 18.34195 | 31.9929 | 54.5122 | 83.05835 | 124.2594 |
Secure Division | SDIV | 93.91275 | 281.39765 | 613.20965 | 1090.61045 | 1870.91515 | 2863.31305 | 4056.85975 |
The time unit is ms.
in src/Main.cpp, you can change the value of KEY_LEN_BIT and SIGMA_LEN_BIT . KEY_LEN_BIT determine the length of the big prime in bits, and SIGMA_LEN_BIT determine the length of
- Bowen Zhao, Jiaming Yuan, Ximeng Liu, Yongdong Wu, Hwee Hwa Pang, and Robert H. Deng. SOCI: A toolkit for secure outsourced computation on integers. IEEE Transactions on Information Forensics and Security, 2022, 17: 3637-3648.