Latest commit

History

100 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

cuHE: Homomorphic and fast

CUDA Homomorphic Encryption Library (cuHE) is a GPU-accelerated library for homomorphic encryption (HE) schemes and homomorphic algorithms defined over polynomial rings. cuHE yields an astonishing performance while providing a simple interface that greatly enhances programmer productivity. It features both algebraic techniques for homomorphic evalution of circuits and highly optimized code for single-GPU or multi-GPU machines. Develop high-performance applications rapidly with cuHE!

The cuHE library is distributed under the terms of the The MIT License (MIT). It is currently created for research purpose only. Several algorithms are implemented as examples and more will follow. Feedback and collaboration of any kind are welcomed.

Features

The library pushes performance to a limit. A number of optimizations such as algebraic techniques for efficient evaluation, memory minimization techniques, memory and stream scheduling and low level CUDA hand-tuned assembly optimizations are included to take full advantage of the mass parallelism and high memory bandwidth GPUs offer. The arithmetic functions constructed to handle very large polynomial operands adopt the Chinese remainder theorem (CRT), the number-theoretic transform (NTT) and Barrett reduction based methods. A few algorithms and routines of the library is described in this paper, along with a performance analysis. More details on arithmetic methods and optimizations regarding HE are explained in our previous papers listed below.

  1. Dai, Wei, and Berk Sunar. "cuHE: A Homomorphic Encryption Accelerator Library." Cryptography and Information Security in the Balkans. Springer International Publishing, 2015. 169-186. [draft] [Springer]

  2. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating NTRU based homomorphic encryption using GPUs." High Performance Extreme Computing Conference (HPEC), 2014 IEEE. IEEE, 2014. [draft] [IEEE Xplore]

  3. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating SWHE Based PIRs Using GPUs." Financial Cryptography and Data Security: FC 2015 International Workshops, BITCOIN, WAHC, and Wearable, San Juan, Puerto Rico, January 30, 2015, Revised Selected Papers. Vol. 8976. Springer, 2015. [draft] [Springer]

Examples

Currently available is an implementation of the Doröz-Hu-Sunar (DHS) somewhat homomorphic encryption (SHE) scheme based on the Lopez-Tromer-Vaikuntanathan (LTV) scheme. Several homomorphic applications built on DHS are implemented on GPUs and are included as examples, such as the Prince block cipher and a sorting algorithm. These examples give an idea of how to program with the cuHE library.

System Requirements

  1. NVIDIA CUDA-Enabled GPUs with computation compability 3.0 or higher
  2. NTL: A Library for doing Number Theory 9.3.0 (requires C++11) NOTE: to avoid random crashes compile it running ./configure NTL_EXCEPTIONS=on
  3. The OpenMP API

Compile

cd cuhe
cmake ./
make

options to cmake command defaults are:

-DGPU_ARCH:STRING=50
-DGCC_CUDA_VERSION:STRING=gcc-4.9

Notes for Mac OS X

On Mac you must use clang instead of gcc. You need to install a version compatible with OpenMP. With brew you can

brew install clang-omp

Then you must tell Cmake and Cuda that you are using clang-omp

cd cuhe
CC=clang-omp CXX=clang-omp++ cmake -DGCC_CUDA_VERSION=clang-omp ./
make

A Short Tutorial

To design/implement a homomorphic application/circuit, e.x. the AND of 8 bits. First of all, we need to decide which homomorphic encryption scheme to adopt and set parameters (polynomial ring degree, coefficient sizes in each level of circuit, relinearization strategy) according to some noise analysis process. Let's say we decide to adopt the DHS HE scheme.

#include"cuHE.h"voidsetParameters(int d, int p, int w, int min, int cut, int m);//in "CuHE.h", set parametersvoidinitCuHE(ZZ *coeffMod_, ZZX modulus); //in "CuHE.h", start pre-computation on GPUs

Then we may process some pre-computation of the circuit. When it is time to run the circuit, we suggest to turn on our virtual allocator. Do not turn it off until the circuit is completely done.

voidstartAllocator(); //in "CuHE.h", start virtual allocatorvoidstopAllocator(); //in "CuHE.h", stop virtual allocator

The program by default uses a single GPU (device ID 0). To adopt multiple devices, call the function below.

voidmultiGPUs(int num); //adopt 'num' GPUs

Those are all the initialization steps. To implement any HE scheme or circuit, please check out the provided examples.

Developer

The cuHE library is developed and maintained by Wei Dai from the Vernam Group at Worcester Polytechnic Institute.

Acknowledgment

Funding for this research was in part provided by the US National Science Foundation CNS Award #1117590 and #1319130.

We want to acknowledge Andrea Peruffo for improving and debugging the code.

About

CUDA Homomorphic Encryption Library

Resources

Stars

212 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

100 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

cuHE: Homomorphic and fast

CUDA Homomorphic Encryption Library (cuHE) is a GPU-accelerated library for homomorphic encryption (HE) schemes and homomorphic algorithms defined over polynomial rings. cuHE yields an astonishing performance while providing a simple interface that greatly enhances programmer productivity. It features both algebraic techniques for homomorphic evalution of circuits and highly optimized code for single-GPU or multi-GPU machines. Develop high-performance applications rapidly with cuHE!

The cuHE library is distributed under the terms of the The MIT License (MIT). It is currently created for research purpose only. Several algorithms are implemented as examples and more will follow. Feedback and collaboration of any kind are welcomed.

Features

The library pushes performance to a limit. A number of optimizations such as algebraic techniques for efficient evaluation, memory minimization techniques, memory and stream scheduling and low level CUDA hand-tuned assembly optimizations are included to take full advantage of the mass parallelism and high memory bandwidth GPUs offer. The arithmetic functions constructed to handle very large polynomial operands adopt the Chinese remainder theorem (CRT), the number-theoretic transform (NTT) and Barrett reduction based methods. A few algorithms and routines of the library is described in this paper, along with a performance analysis. More details on arithmetic methods and optimizations regarding HE are explained in our previous papers listed below.

  1. Dai, Wei, and Berk Sunar. "cuHE: A Homomorphic Encryption Accelerator Library." Cryptography and Information Security in the Balkans. Springer International Publishing, 2015. 169-186. [draft] [Springer]

  2. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating NTRU based homomorphic encryption using GPUs." High Performance Extreme Computing Conference (HPEC), 2014 IEEE. IEEE, 2014. [draft] [IEEE Xplore]

  3. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating SWHE Based PIRs Using GPUs." Financial Cryptography and Data Security: FC 2015 International Workshops, BITCOIN, WAHC, and Wearable, San Juan, Puerto Rico, January 30, 2015, Revised Selected Papers. Vol. 8976. Springer, 2015. [draft] [Springer]

Examples

Currently available is an implementation of the Doröz-Hu-Sunar (DHS) somewhat homomorphic encryption (SHE) scheme based on the Lopez-Tromer-Vaikuntanathan (LTV) scheme. Several homomorphic applications built on DHS are implemented on GPUs and are included as examples, such as the Prince block cipher and a sorting algorithm. These examples give an idea of how to program with the cuHE library.

System Requirements

  1. NVIDIA CUDA-Enabled GPUs with computation compability 3.0 or higher
  2. NTL: A Library for doing Number Theory 9.3.0 (requires C++11) NOTE: to avoid random crashes compile it running ./configure NTL_EXCEPTIONS=on
  3. The OpenMP API

Compile

cd cuhe
cmake ./
make

options to cmake command defaults are:

-DGPU_ARCH:STRING=50
-DGCC_CUDA_VERSION:STRING=gcc-4.9

Notes for Mac OS X

On Mac you must use clang instead of gcc. You need to install a version compatible with OpenMP. With brew you can

brew install clang-omp

Then you must tell Cmake and Cuda that you are using clang-omp

cd cuhe
CC=clang-omp CXX=clang-omp++ cmake -DGCC_CUDA_VERSION=clang-omp ./
make

A Short Tutorial

To design/implement a homomorphic application/circuit, e.x. the AND of 8 bits. First of all, we need to decide which homomorphic encryption scheme to adopt and set parameters (polynomial ring degree, coefficient sizes in each level of circuit, relinearization strategy) according to some noise analysis process. Let's say we decide to adopt the DHS HE scheme.

#include"cuHE.h"voidsetParameters(int d, int p, int w, int min, int cut, int m);//in "CuHE.h", set parametersvoidinitCuHE(ZZ *coeffMod_, ZZX modulus); //in "CuHE.h", start pre-computation on GPUs

Then we may process some pre-computation of the circuit. When it is time to run the circuit, we suggest to turn on our virtual allocator. Do not turn it off until the circuit is completely done.

voidstartAllocator(); //in "CuHE.h", start virtual allocatorvoidstopAllocator(); //in "CuHE.h", stop virtual allocator

The program by default uses a single GPU (device ID 0). To adopt multiple devices, call the function below.

voidmultiGPUs(int num); //adopt 'num' GPUs

Those are all the initialization steps. To implement any HE scheme or circuit, please check out the provided examples.

Developer

The cuHE library is developed and maintained by Wei Dai from the Vernam Group at Worcester Polytechnic Institute.

Acknowledgment

Funding for this research was in part provided by the US National Science Foundation CNS Award #1117590 and #1319130.

We want to acknowledge Andrea Peruffo for improving and debugging the code.

About

CUDA Homomorphic Encryption Library

Resources

Stars

212 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

100 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

cuHE: Homomorphic and fast

CUDA Homomorphic Encryption Library (cuHE) is a GPU-accelerated library for homomorphic encryption (HE) schemes and homomorphic algorithms defined over polynomial rings. cuHE yields an astonishing performance while providing a simple interface that greatly enhances programmer productivity. It features both algebraic techniques for homomorphic evalution of circuits and highly optimized code for single-GPU or multi-GPU machines. Develop high-performance applications rapidly with cuHE!

The cuHE library is distributed under the terms of the The MIT License (MIT). It is currently created for research purpose only. Several algorithms are implemented as examples and more will follow. Feedback and collaboration of any kind are welcomed.

Features

The library pushes performance to a limit. A number of optimizations such as algebraic techniques for efficient evaluation, memory minimization techniques, memory and stream scheduling and low level CUDA hand-tuned assembly optimizations are included to take full advantage of the mass parallelism and high memory bandwidth GPUs offer. The arithmetic functions constructed to handle very large polynomial operands adopt the Chinese remainder theorem (CRT), the number-theoretic transform (NTT) and Barrett reduction based methods. A few algorithms and routines of the library is described in this paper, along with a performance analysis. More details on arithmetic methods and optimizations regarding HE are explained in our previous papers listed below.

  1. Dai, Wei, and Berk Sunar. "cuHE: A Homomorphic Encryption Accelerator Library." Cryptography and Information Security in the Balkans. Springer International Publishing, 2015. 169-186. [draft] [Springer]

  2. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating NTRU based homomorphic encryption using GPUs." High Performance Extreme Computing Conference (HPEC), 2014 IEEE. IEEE, 2014. [draft] [IEEE Xplore]

  3. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating SWHE Based PIRs Using GPUs." Financial Cryptography and Data Security: FC 2015 International Workshops, BITCOIN, WAHC, and Wearable, San Juan, Puerto Rico, January 30, 2015, Revised Selected Papers. Vol. 8976. Springer, 2015. [draft] [Springer]

Examples

Currently available is an implementation of the Doröz-Hu-Sunar (DHS) somewhat homomorphic encryption (SHE) scheme based on the Lopez-Tromer-Vaikuntanathan (LTV) scheme. Several homomorphic applications built on DHS are implemented on GPUs and are included as examples, such as the Prince block cipher and a sorting algorithm. These examples give an idea of how to program with the cuHE library.

System Requirements

  1. NVIDIA CUDA-Enabled GPUs with computation compability 3.0 or higher
  2. NTL: A Library for doing Number Theory 9.3.0 (requires C++11) NOTE: to avoid random crashes compile it running ./configure NTL_EXCEPTIONS=on
  3. The OpenMP API

Compile

cd cuhe
cmake ./
make

options to cmake command defaults are:

-DGPU_ARCH:STRING=50
-DGCC_CUDA_VERSION:STRING=gcc-4.9

Notes for Mac OS X

On Mac you must use clang instead of gcc. You need to install a version compatible with OpenMP. With brew you can

brew install clang-omp

Then you must tell Cmake and Cuda that you are using clang-omp

cd cuhe
CC=clang-omp CXX=clang-omp++ cmake -DGCC_CUDA_VERSION=clang-omp ./
make

A Short Tutorial

To design/implement a homomorphic application/circuit, e.x. the AND of 8 bits. First of all, we need to decide which homomorphic encryption scheme to adopt and set parameters (polynomial ring degree, coefficient sizes in each level of circuit, relinearization strategy) according to some noise analysis process. Let's say we decide to adopt the DHS HE scheme.

#include"cuHE.h"voidsetParameters(int d, int p, int w, int min, int cut, int m);//in "CuHE.h", set parametersvoidinitCuHE(ZZ *coeffMod_, ZZX modulus); //in "CuHE.h", start pre-computation on GPUs

Then we may process some pre-computation of the circuit. When it is time to run the circuit, we suggest to turn on our virtual allocator. Do not turn it off until the circuit is completely done.

voidstartAllocator(); //in "CuHE.h", start virtual allocatorvoidstopAllocator(); //in "CuHE.h", stop virtual allocator

The program by default uses a single GPU (device ID 0). To adopt multiple devices, call the function below.

voidmultiGPUs(int num); //adopt 'num' GPUs

Those are all the initialization steps. To implement any HE scheme or circuit, please check out the provided examples.

Developer

The cuHE library is developed and maintained by Wei Dai from the Vernam Group at Worcester Polytechnic Institute.

Acknowledgment

Funding for this research was in part provided by the US National Science Foundation CNS Award #1117590 and #1319130.

We want to acknowledge Andrea Peruffo for improving and debugging the code.

About

CUDA Homomorphic Encryption Library

Resources

Stars

212 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

100 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

cuHE: Homomorphic and fast

CUDA Homomorphic Encryption Library (cuHE) is a GPU-accelerated library for homomorphic encryption (HE) schemes and homomorphic algorithms defined over polynomial rings. cuHE yields an astonishing performance while providing a simple interface that greatly enhances programmer productivity. It features both algebraic techniques for homomorphic evalution of circuits and highly optimized code for single-GPU or multi-GPU machines. Develop high-performance applications rapidly with cuHE!

The cuHE library is distributed under the terms of the The MIT License (MIT). It is currently created for research purpose only. Several algorithms are implemented as examples and more will follow. Feedback and collaboration of any kind are welcomed.

Features

The library pushes performance to a limit. A number of optimizations such as algebraic techniques for efficient evaluation, memory minimization techniques, memory and stream scheduling and low level CUDA hand-tuned assembly optimizations are included to take full advantage of the mass parallelism and high memory bandwidth GPUs offer. The arithmetic functions constructed to handle very large polynomial operands adopt the Chinese remainder theorem (CRT), the number-theoretic transform (NTT) and Barrett reduction based methods. A few algorithms and routines of the library is described in this paper, along with a performance analysis. More details on arithmetic methods and optimizations regarding HE are explained in our previous papers listed below.

  1. Dai, Wei, and Berk Sunar. "cuHE: A Homomorphic Encryption Accelerator Library." Cryptography and Information Security in the Balkans. Springer International Publishing, 2015. 169-186. [draft] [Springer]

  2. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating NTRU based homomorphic encryption using GPUs." High Performance Extreme Computing Conference (HPEC), 2014 IEEE. IEEE, 2014. [draft] [IEEE Xplore]

  3. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating SWHE Based PIRs Using GPUs." Financial Cryptography and Data Security: FC 2015 International Workshops, BITCOIN, WAHC, and Wearable, San Juan, Puerto Rico, January 30, 2015, Revised Selected Papers. Vol. 8976. Springer, 2015. [draft] [Springer]

Examples

Currently available is an implementation of the Doröz-Hu-Sunar (DHS) somewhat homomorphic encryption (SHE) scheme based on the Lopez-Tromer-Vaikuntanathan (LTV) scheme. Several homomorphic applications built on DHS are implemented on GPUs and are included as examples, such as the Prince block cipher and a sorting algorithm. These examples give an idea of how to program with the cuHE library.

System Requirements

  1. NVIDIA CUDA-Enabled GPUs with computation compability 3.0 or higher
  2. NTL: A Library for doing Number Theory 9.3.0 (requires C++11) NOTE: to avoid random crashes compile it running ./configure NTL_EXCEPTIONS=on
  3. The OpenMP API

Compile

cd cuhe
cmake ./
make

options to cmake command defaults are:

-DGPU_ARCH:STRING=50
-DGCC_CUDA_VERSION:STRING=gcc-4.9

Notes for Mac OS X

On Mac you must use clang instead of gcc. You need to install a version compatible with OpenMP. With brew you can

brew install clang-omp

Then you must tell Cmake and Cuda that you are using clang-omp

cd cuhe
CC=clang-omp CXX=clang-omp++ cmake -DGCC_CUDA_VERSION=clang-omp ./
make

A Short Tutorial

To design/implement a homomorphic application/circuit, e.x. the AND of 8 bits. First of all, we need to decide which homomorphic encryption scheme to adopt and set parameters (polynomial ring degree, coefficient sizes in each level of circuit, relinearization strategy) according to some noise analysis process. Let's say we decide to adopt the DHS HE scheme.

#include"cuHE.h"voidsetParameters(int d, int p, int w, int min, int cut, int m);//in "CuHE.h", set parametersvoidinitCuHE(ZZ *coeffMod_, ZZX modulus); //in "CuHE.h", start pre-computation on GPUs

Then we may process some pre-computation of the circuit. When it is time to run the circuit, we suggest to turn on our virtual allocator. Do not turn it off until the circuit is completely done.

voidstartAllocator(); //in "CuHE.h", start virtual allocatorvoidstopAllocator(); //in "CuHE.h", stop virtual allocator

The program by default uses a single GPU (device ID 0). To adopt multiple devices, call the function below.

voidmultiGPUs(int num); //adopt 'num' GPUs

Those are all the initialization steps. To implement any HE scheme or circuit, please check out the provided examples.

Developer

The cuHE library is developed and maintained by Wei Dai from the Vernam Group at Worcester Polytechnic Institute.

Acknowledgment

Funding for this research was in part provided by the US National Science Foundation CNS Award #1117590 and #1319130.

We want to acknowledge Andrea Peruffo for improving and debugging the code.

About

CUDA Homomorphic Encryption Library

Resources

Stars

212 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

100 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

cuHE: Homomorphic and fast

CUDA Homomorphic Encryption Library (cuHE) is a GPU-accelerated library for homomorphic encryption (HE) schemes and homomorphic algorithms defined over polynomial rings. cuHE yields an astonishing performance while providing a simple interface that greatly enhances programmer productivity. It features both algebraic techniques for homomorphic evalution of circuits and highly optimized code for single-GPU or multi-GPU machines. Develop high-performance applications rapidly with cuHE!

The cuHE library is distributed under the terms of the The MIT License (MIT). It is currently created for research purpose only. Several algorithms are implemented as examples and more will follow. Feedback and collaboration of any kind are welcomed.

Features

The library pushes performance to a limit. A number of optimizations such as algebraic techniques for efficient evaluation, memory minimization techniques, memory and stream scheduling and low level CUDA hand-tuned assembly optimizations are included to take full advantage of the mass parallelism and high memory bandwidth GPUs offer. The arithmetic functions constructed to handle very large polynomial operands adopt the Chinese remainder theorem (CRT), the number-theoretic transform (NTT) and Barrett reduction based methods. A few algorithms and routines of the library is described in this paper, along with a performance analysis. More details on arithmetic methods and optimizations regarding HE are explained in our previous papers listed below.

  1. Dai, Wei, and Berk Sunar. "cuHE: A Homomorphic Encryption Accelerator Library." Cryptography and Information Security in the Balkans. Springer International Publishing, 2015. 169-186. [draft] [Springer]

  2. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating NTRU based homomorphic encryption using GPUs." High Performance Extreme Computing Conference (HPEC), 2014 IEEE. IEEE, 2014. [draft] [IEEE Xplore]

  3. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating SWHE Based PIRs Using GPUs." Financial Cryptography and Data Security: FC 2015 International Workshops, BITCOIN, WAHC, and Wearable, San Juan, Puerto Rico, January 30, 2015, Revised Selected Papers. Vol. 8976. Springer, 2015. [draft] [Springer]

Examples

Currently available is an implementation of the Doröz-Hu-Sunar (DHS) somewhat homomorphic encryption (SHE) scheme based on the Lopez-Tromer-Vaikuntanathan (LTV) scheme. Several homomorphic applications built on DHS are implemented on GPUs and are included as examples, such as the Prince block cipher and a sorting algorithm. These examples give an idea of how to program with the cuHE library.

System Requirements

  1. NVIDIA CUDA-Enabled GPUs with computation compability 3.0 or higher
  2. NTL: A Library for doing Number Theory 9.3.0 (requires C++11) NOTE: to avoid random crashes compile it running ./configure NTL_EXCEPTIONS=on
  3. The OpenMP API

Compile

cd cuhe
cmake ./
make

options to cmake command defaults are:

-DGPU_ARCH:STRING=50
-DGCC_CUDA_VERSION:STRING=gcc-4.9

Notes for Mac OS X

On Mac you must use clang instead of gcc. You need to install a version compatible with OpenMP. With brew you can

brew install clang-omp

Then you must tell Cmake and Cuda that you are using clang-omp

cd cuhe
CC=clang-omp CXX=clang-omp++ cmake -DGCC_CUDA_VERSION=clang-omp ./
make

A Short Tutorial

To design/implement a homomorphic application/circuit, e.x. the AND of 8 bits. First of all, we need to decide which homomorphic encryption scheme to adopt and set parameters (polynomial ring degree, coefficient sizes in each level of circuit, relinearization strategy) according to some noise analysis process. Let's say we decide to adopt the DHS HE scheme.

#include"cuHE.h"voidsetParameters(int d, int p, int w, int min, int cut, int m);//in "CuHE.h", set parametersvoidinitCuHE(ZZ *coeffMod_, ZZX modulus); //in "CuHE.h", start pre-computation on GPUs

Then we may process some pre-computation of the circuit. When it is time to run the circuit, we suggest to turn on our virtual allocator. Do not turn it off until the circuit is completely done.

voidstartAllocator(); //in "CuHE.h", start virtual allocatorvoidstopAllocator(); //in "CuHE.h", stop virtual allocator

The program by default uses a single GPU (device ID 0). To adopt multiple devices, call the function below.

voidmultiGPUs(int num); //adopt 'num' GPUs

Those are all the initialization steps. To implement any HE scheme or circuit, please check out the provided examples.

Developer

The cuHE library is developed and maintained by Wei Dai from the Vernam Group at Worcester Polytechnic Institute.

Acknowledgment

Funding for this research was in part provided by the US National Science Foundation CNS Award #1117590 and #1319130.

We want to acknowledge Andrea Peruffo for improving and debugging the code.

About

CUDA Homomorphic Encryption Library

Resources

Stars

212 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

100 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

cuHE: Homomorphic and fast

CUDA Homomorphic Encryption Library (cuHE) is a GPU-accelerated library for homomorphic encryption (HE) schemes and homomorphic algorithms defined over polynomial rings. cuHE yields an astonishing performance while providing a simple interface that greatly enhances programmer productivity. It features both algebraic techniques for homomorphic evalution of circuits and highly optimized code for single-GPU or multi-GPU machines. Develop high-performance applications rapidly with cuHE!

The cuHE library is distributed under the terms of the The MIT License (MIT). It is currently created for research purpose only. Several algorithms are implemented as examples and more will follow. Feedback and collaboration of any kind are welcomed.

Features

The library pushes performance to a limit. A number of optimizations such as algebraic techniques for efficient evaluation, memory minimization techniques, memory and stream scheduling and low level CUDA hand-tuned assembly optimizations are included to take full advantage of the mass parallelism and high memory bandwidth GPUs offer. The arithmetic functions constructed to handle very large polynomial operands adopt the Chinese remainder theorem (CRT), the number-theoretic transform (NTT) and Barrett reduction based methods. A few algorithms and routines of the library is described in this paper, along with a performance analysis. More details on arithmetic methods and optimizations regarding HE are explained in our previous papers listed below.

  1. Dai, Wei, and Berk Sunar. "cuHE: A Homomorphic Encryption Accelerator Library." Cryptography and Information Security in the Balkans. Springer International Publishing, 2015. 169-186. [draft] [Springer]

  2. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating NTRU based homomorphic encryption using GPUs." High Performance Extreme Computing Conference (HPEC), 2014 IEEE. IEEE, 2014. [draft] [IEEE Xplore]

  3. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating SWHE Based PIRs Using GPUs." Financial Cryptography and Data Security: FC 2015 International Workshops, BITCOIN, WAHC, and Wearable, San Juan, Puerto Rico, January 30, 2015, Revised Selected Papers. Vol. 8976. Springer, 2015. [draft] [Springer]

Examples

Currently available is an implementation of the Doröz-Hu-Sunar (DHS) somewhat homomorphic encryption (SHE) scheme based on the Lopez-Tromer-Vaikuntanathan (LTV) scheme. Several homomorphic applications built on DHS are implemented on GPUs and are included as examples, such as the Prince block cipher and a sorting algorithm. These examples give an idea of how to program with the cuHE library.

System Requirements

  1. NVIDIA CUDA-Enabled GPUs with computation compability 3.0 or higher
  2. NTL: A Library for doing Number Theory 9.3.0 (requires C++11) NOTE: to avoid random crashes compile it running ./configure NTL_EXCEPTIONS=on
  3. The OpenMP API

Compile

cd cuhe
cmake ./
make

options to cmake command defaults are:

-DGPU_ARCH:STRING=50
-DGCC_CUDA_VERSION:STRING=gcc-4.9

Notes for Mac OS X

On Mac you must use clang instead of gcc. You need to install a version compatible with OpenMP. With brew you can

brew install clang-omp

Then you must tell Cmake and Cuda that you are using clang-omp

cd cuhe
CC=clang-omp CXX=clang-omp++ cmake -DGCC_CUDA_VERSION=clang-omp ./
make

A Short Tutorial

To design/implement a homomorphic application/circuit, e.x. the AND of 8 bits. First of all, we need to decide which homomorphic encryption scheme to adopt and set parameters (polynomial ring degree, coefficient sizes in each level of circuit, relinearization strategy) according to some noise analysis process. Let's say we decide to adopt the DHS HE scheme.

#include"cuHE.h"voidsetParameters(int d, int p, int w, int min, int cut, int m);//in "CuHE.h", set parametersvoidinitCuHE(ZZ *coeffMod_, ZZX modulus); //in "CuHE.h", start pre-computation on GPUs

Then we may process some pre-computation of the circuit. When it is time to run the circuit, we suggest to turn on our virtual allocator. Do not turn it off until the circuit is completely done.

voidstartAllocator(); //in "CuHE.h", start virtual allocatorvoidstopAllocator(); //in "CuHE.h", stop virtual allocator

The program by default uses a single GPU (device ID 0). To adopt multiple devices, call the function below.

voidmultiGPUs(int num); //adopt 'num' GPUs

Those are all the initialization steps. To implement any HE scheme or circuit, please check out the provided examples.

Developer

The cuHE library is developed and maintained by Wei Dai from the Vernam Group at Worcester Polytechnic Institute.

Acknowledgment

Funding for this research was in part provided by the US National Science Foundation CNS Award #1117590 and #1319130.

We want to acknowledge Andrea Peruffo for improving and debugging the code.

About

CUDA Homomorphic Encryption Library

Resources

Stars

212 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

100 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

cuHE: Homomorphic and fast

CUDA Homomorphic Encryption Library (cuHE) is a GPU-accelerated library for homomorphic encryption (HE) schemes and homomorphic algorithms defined over polynomial rings. cuHE yields an astonishing performance while providing a simple interface that greatly enhances programmer productivity. It features both algebraic techniques for homomorphic evalution of circuits and highly optimized code for single-GPU or multi-GPU machines. Develop high-performance applications rapidly with cuHE!

The cuHE library is distributed under the terms of the The MIT License (MIT). It is currently created for research purpose only. Several algorithms are implemented as examples and more will follow. Feedback and collaboration of any kind are welcomed.

Features

The library pushes performance to a limit. A number of optimizations such as algebraic techniques for efficient evaluation, memory minimization techniques, memory and stream scheduling and low level CUDA hand-tuned assembly optimizations are included to take full advantage of the mass parallelism and high memory bandwidth GPUs offer. The arithmetic functions constructed to handle very large polynomial operands adopt the Chinese remainder theorem (CRT), the number-theoretic transform (NTT) and Barrett reduction based methods. A few algorithms and routines of the library is described in this paper, along with a performance analysis. More details on arithmetic methods and optimizations regarding HE are explained in our previous papers listed below.

  1. Dai, Wei, and Berk Sunar. "cuHE: A Homomorphic Encryption Accelerator Library." Cryptography and Information Security in the Balkans. Springer International Publishing, 2015. 169-186. [draft] [Springer]

  2. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating NTRU based homomorphic encryption using GPUs." High Performance Extreme Computing Conference (HPEC), 2014 IEEE. IEEE, 2014. [draft] [IEEE Xplore]

  3. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating SWHE Based PIRs Using GPUs." Financial Cryptography and Data Security: FC 2015 International Workshops, BITCOIN, WAHC, and Wearable, San Juan, Puerto Rico, January 30, 2015, Revised Selected Papers. Vol. 8976. Springer, 2015. [draft] [Springer]

Examples

Currently available is an implementation of the Doröz-Hu-Sunar (DHS) somewhat homomorphic encryption (SHE) scheme based on the Lopez-Tromer-Vaikuntanathan (LTV) scheme. Several homomorphic applications built on DHS are implemented on GPUs and are included as examples, such as the Prince block cipher and a sorting algorithm. These examples give an idea of how to program with the cuHE library.

System Requirements

  1. NVIDIA CUDA-Enabled GPUs with computation compability 3.0 or higher
  2. NTL: A Library for doing Number Theory 9.3.0 (requires C++11) NOTE: to avoid random crashes compile it running ./configure NTL_EXCEPTIONS=on
  3. The OpenMP API

Compile

cd cuhe
cmake ./
make

options to cmake command defaults are:

-DGPU_ARCH:STRING=50
-DGCC_CUDA_VERSION:STRING=gcc-4.9

Notes for Mac OS X

On Mac you must use clang instead of gcc. You need to install a version compatible with OpenMP. With brew you can

brew install clang-omp

Then you must tell Cmake and Cuda that you are using clang-omp

cd cuhe
CC=clang-omp CXX=clang-omp++ cmake -DGCC_CUDA_VERSION=clang-omp ./
make

A Short Tutorial

To design/implement a homomorphic application/circuit, e.x. the AND of 8 bits. First of all, we need to decide which homomorphic encryption scheme to adopt and set parameters (polynomial ring degree, coefficient sizes in each level of circuit, relinearization strategy) according to some noise analysis process. Let's say we decide to adopt the DHS HE scheme.

#include"cuHE.h"voidsetParameters(int d, int p, int w, int min, int cut, int m);//in "CuHE.h", set parametersvoidinitCuHE(ZZ *coeffMod_, ZZX modulus); //in "CuHE.h", start pre-computation on GPUs

Then we may process some pre-computation of the circuit. When it is time to run the circuit, we suggest to turn on our virtual allocator. Do not turn it off until the circuit is completely done.

voidstartAllocator(); //in "CuHE.h", start virtual allocatorvoidstopAllocator(); //in "CuHE.h", stop virtual allocator

The program by default uses a single GPU (device ID 0). To adopt multiple devices, call the function below.

voidmultiGPUs(int num); //adopt 'num' GPUs

Those are all the initialization steps. To implement any HE scheme or circuit, please check out the provided examples.

Developer

The cuHE library is developed and maintained by Wei Dai from the Vernam Group at Worcester Polytechnic Institute.

Acknowledgment

Funding for this research was in part provided by the US National Science Foundation CNS Award #1117590 and #1319130.

We want to acknowledge Andrea Peruffo for improving and debugging the code.

About

CUDA Homomorphic Encryption Library

Resources

Stars

212 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

100 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

cuHE: Homomorphic and fast

CUDA Homomorphic Encryption Library (cuHE) is a GPU-accelerated library for homomorphic encryption (HE) schemes and homomorphic algorithms defined over polynomial rings. cuHE yields an astonishing performance while providing a simple interface that greatly enhances programmer productivity. It features both algebraic techniques for homomorphic evalution of circuits and highly optimized code for single-GPU or multi-GPU machines. Develop high-performance applications rapidly with cuHE!

The cuHE library is distributed under the terms of the The MIT License (MIT). It is currently created for research purpose only. Several algorithms are implemented as examples and more will follow. Feedback and collaboration of any kind are welcomed.

Features

The library pushes performance to a limit. A number of optimizations such as algebraic techniques for efficient evaluation, memory minimization techniques, memory and stream scheduling and low level CUDA hand-tuned assembly optimizations are included to take full advantage of the mass parallelism and high memory bandwidth GPUs offer. The arithmetic functions constructed to handle very large polynomial operands adopt the Chinese remainder theorem (CRT), the number-theoretic transform (NTT) and Barrett reduction based methods. A few algorithms and routines of the library is described in this paper, along with a performance analysis. More details on arithmetic methods and optimizations regarding HE are explained in our previous papers listed below.

  1. Dai, Wei, and Berk Sunar. "cuHE: A Homomorphic Encryption Accelerator Library." Cryptography and Information Security in the Balkans. Springer International Publishing, 2015. 169-186. [draft] [Springer]

  2. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating NTRU based homomorphic encryption using GPUs." High Performance Extreme Computing Conference (HPEC), 2014 IEEE. IEEE, 2014. [draft] [IEEE Xplore]

  3. Dai, Wei, Yarkın Doröz, and Berk Sunar. "Accelerating SWHE Based PIRs Using GPUs." Financial Cryptography and Data Security: FC 2015 International Workshops, BITCOIN, WAHC, and Wearable, San Juan, Puerto Rico, January 30, 2015, Revised Selected Papers. Vol. 8976. Springer, 2015. [draft] [Springer]

Examples

Currently available is an implementation of the Doröz-Hu-Sunar (DHS) somewhat homomorphic encryption (SHE) scheme based on the Lopez-Tromer-Vaikuntanathan (LTV) scheme. Several homomorphic applications built on DHS are implemented on GPUs and are included as examples, such as the Prince block cipher and a sorting algorithm. These examples give an idea of how to program with the cuHE library.

System Requirements

  1. NVIDIA CUDA-Enabled GPUs with computation compability 3.0 or higher
  2. NTL: A Library for doing Number Theory 9.3.0 (requires C++11) NOTE: to avoid random crashes compile it running ./configure NTL_EXCEPTIONS=on
  3. The OpenMP API

Compile

cd cuhe
cmake ./
make

options to cmake command defaults are:

-DGPU_ARCH:STRING=50
-DGCC_CUDA_VERSION:STRING=gcc-4.9

Notes for Mac OS X

On Mac you must use clang instead of gcc. You need to install a version compatible with OpenMP. With brew you can

brew install clang-omp

Then you must tell Cmake and Cuda that you are using clang-omp

cd cuhe
CC=clang-omp CXX=clang-omp++ cmake -DGCC_CUDA_VERSION=clang-omp ./
make

A Short Tutorial

To design/implement a homomorphic application/circuit, e.x. the AND of 8 bits. First of all, we need to decide which homomorphic encryption scheme to adopt and set parameters (polynomial ring degree, coefficient sizes in each level of circuit, relinearization strategy) according to some noise analysis process. Let's say we decide to adopt the DHS HE scheme.

#include"cuHE.h"voidsetParameters(int d, int p, int w, int min, int cut, int m);//in "CuHE.h", set parametersvoidinitCuHE(ZZ *coeffMod_, ZZX modulus); //in "CuHE.h", start pre-computation on GPUs

Then we may process some pre-computation of the circuit. When it is time to run the circuit, we suggest to turn on our virtual allocator. Do not turn it off until the circuit is completely done.

voidstartAllocator(); //in "CuHE.h", start virtual allocatorvoidstopAllocator(); //in "CuHE.h", stop virtual allocator

The program by default uses a single GPU (device ID 0). To adopt multiple devices, call the function below.

voidmultiGPUs(int num); //adopt 'num' GPUs

Those are all the initialization steps. To implement any HE scheme or circuit, please check out the provided examples.

Developer

The cuHE library is developed and maintained by Wei Dai from the Vernam Group at Worcester Polytechnic Institute.

Acknowledgment

Funding for this research was in part provided by the US National Science Foundation CNS Award #1117590 and #1319130.

We want to acknowledge Andrea Peruffo for improving and debugging the code.

About

CUDA Homomorphic Encryption Library

Resources

Stars

212 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages