KR20230078131A - 반복 배열 ntt를 이용한 동형 암호 연산 장치 및 방법 - Google Patents

반복 배열 ntt를 이용한 동형 암호 연산 장치 및 방법 Download PDF

Info

Publication number
KR20230078131A
KR20230078131A KR1020210165593A KR20210165593A KR20230078131A KR 20230078131 A KR20230078131 A KR 20230078131A KR 1020210165593 A KR1020210165593 A KR 1020210165593A KR 20210165593 A KR20210165593 A KR 20210165593A KR 20230078131 A KR20230078131 A KR 20230078131A
Authority
KR
South Korea
Prior art keywords
ntt
memory
polynomial
module
twiddle factor
Prior art date
Application number
KR1020210165593A
Other languages
English (en)
Inventor
권순민
이한호
두옹옥팝
유동훈
Original Assignee
삼성전자주식회사
인하대학교 산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 삼성전자주식회사, 인하대학교 산학협력단 filed Critical 삼성전자주식회사
Priority to KR1020210165593A priority Critical patent/KR20230078131A/ko
Priority to US17/961,828 priority patent/US20230171084A1/en
Publication of KR20230078131A publication Critical patent/KR20230078131A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/008Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols involving homomorphic encryption
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/30Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
    • H04L9/3093Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy involving Lattices or polynomial equations, e.g. NTRU scheme

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Mathematical Physics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Algebra (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Computational Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Complex Calculations (AREA)

Abstract

반복 배열 NTT를 이용한 동형 암호 연산 장치 및 방법이 개시된다. 일 실시예에 따른 동형 암호 연산 장치는, 다항식을 수신하여 저장하는 제1 메모리와, 트위들 팩터를 저장하는 제2 메모리와, 상기 트위들 팩터에 기초하여 상기 다항식에 NTT(Number Theoretic Transform) 연산을 수행하는 NTT 모듈과, 상기 제1 메모리, 상기 제2 메모리 및 상기 NTT 모듈을 제어하는 컨트롤러를 포함하고, 상기 NTT 모듈은 상기 다항식의 계수에 대한 모듈러 연산을 수행하는 복수의 BU(Butterfly Unit)로 구성된 BU 어레이(array)를 포함한다.

Description

반복 배열 NTT를 이용한 동형 암호 연산 장치 및 방법{APPRATUS AND METHOD OF HOMOMORPHIC ENCRYPTION OPERATION USING ITERATIVE ARRAY NUMBER THEORETIC TRANSFORM}
아래 실시예들은 동형 암호 연산 장치 및 방법에 관한 것이다.
데이터를 활용하는 인공지능 기술이 발전함에 따라, 민감한 정보를 포함하는 데이터의 프라이버시를 보장해야 한다는 상호 대칭적인 기술적 요구사항이 증가하고 있다. 양자 컴퓨팅 시대의 도래에도 안전한 데이터 보안 기술과 같이 복합적인 요구 사항을 해결할 수 있는 기술이 요구되고 있다. 빠르게 성장하는 클라우드 컴퓨팅 기술로 데이터 개인 정보 보호, 보안 및 기밀성에 대한 우려가 증가하고 있다.
상술한 복합적인 요구사항을 해결할 수 있는 기술로써 동형암호 (homomorphic encryption) 기술이 부각되었다. 동형 암호 기술을 활용하기 위해서는 현재의 느린 완전 동형 암호 처리 속도를 실효적인 수준으로 끌어올리는 암호 데이터 완전 동형 암호 처리 가속기용 SoC(System on Chip) 기술 개발이 필요하다.
동형암호 기술은 데이터를 암호화된 상태에서 연산할 수 있는 암호화 방법으로, 암호문들을 이용한 연산결과는 새로운 암호문이 되며, 이를 복호화 한 평문은 암호화하기 전 데이터의 연산 결과와 같다.
동형암호 기술은 양자 내성 암호의 일종인 격자 기반(lattice-based)으로 암호화된 데이터 상에서 사칙연산이 가능하기 때문에 높은 관심을 받고 있으나, 원본 데이터를 암호화하면 데이터의 워드 크기가 커져서 암호문 간의 연산 처리 시간이 길게 소요되는 단점이 있어서, 연산 성능을 크게 향상시키는 기술이 필요하다.
일 실시예에 따른 동형 암호 연산 장치는, 다항식을 수신하여 저장하는 제1 메모리와, 트위들 팩터를 저장하는 제2 메모리와, 상기 트위들 팩터에 기초하여 상기 다항식에 NTT(Number Theoretic Transform) 연산을 수행하는 NTT 모듈과, 상기 제1 메모리, 상기 제2 메모리 및 상기 NTT 모듈을 제어하는 컨트롤러를 포함하고, 상기 NTT 모듈은 상기 다항식의 계수에 대한 모듈러 연산을 수행하는 복수의 BU(Butterfly Unit)로 구성된 BU 어레이(array)를 포함한다.
상기 BU 어레이는, 상기 복수의 BU가 2 차원으로 배열됨으로써 구성될 수 있다.
상기 다항식은 제1 계수 및 제2 계수를 포함하고, 상기 복수의 BU 각각은, 상기 트위들 팩터와 상기 제2 계수의 곱셈을 수행하는 곱셈기와, 상기 곱셈기의 출력에 대하여 모듈러 리덕션을 수행하는 모듈러 리덕션 연산기와, 상기 모듈러 리덕션 연산기의 출력과 상기 제1 계수를 더하는 덧셈기와, 상기 덧셈기의 출력에 모듈러 애디션(modular addition)을 수행하는 모듈러 애디션 수행기와, 상기 제1 계수와 상기 모듈러 리덕션 연산기의 출력의 뺄셈을 수행하는 뺄셈기와, 상기 뺄셈기의 출력에 모듈러 섭트랙션 연산을 수행하는 모듈러 섭트랙션 연산기를 포함할 수 있다.
상기 NTT 연산은, 미리 결정된 개수의 스테이지(stage)를 포함하고, 상기 NTT 모듈은, 상기 미리 결정된 개수에 대응하는 기수(radix)에 기초하여 NTT 연산을 수행할 수 있다.
상기 미리 결정된 개수는, 상기 다항식의 차수에 기초하여 결정될 수 있다.
상기 트위들 팩터는, 상기 다항식의 차수에 기초하여 결정될 수 있다.
상기 제2 메모리는, 상기 다항식의 차수에 기초하여 결정된 개수의 메모리 뱅크에 비트 반전 순서(bit-reversed order)로 상기 트위들 팩터를 저장할 수 있다.
상기 컨트롤러는, 상기 NTT 모듈의 반복 횟수(iteration)를 결정하고, 상기 복수의 BU의 진행 단계에 따른 입력 계수를 받아오는 수를 측정하고, 상기 제1 메모리의 읽기 및 쓰기를 수행하기 위한 주소를 생성할 수 있다.
상기 컨트롤러는, 상기 주소에 기초하여 상기 제1 메모리에 상기 다항식의 계수를 쓰기(write) 위한 뱅크 주소 및 순서(order)를 생성하고, 상기 주소에 기초하여 상기 제1 메모리로부터 상기 다항식의 계수를 읽고, 상기 제2 메모리로부터 상기 트위들 팩터를 읽기 위한 뱅크 주소 및 순서를 생성할 수 있다.
상기 NTT 모듈은 상기 주소를 이용하여 각각의 이터레이션 동안 상기 제1 메모리로부터 상기 다항식의 차수에 기초하여 결정된 입력 개수를 불러오고, NTT 연산 결과를 상기 주소에 저장할 수 있다.
일 실시예에 따른 동형 암호 연산 방법은, 다항식을 수신하여 저장하는 단계와, 트위들 팩터를 저장하는 단계와, 상기 트위들 팩터에 기초하여 상기 다항식에 NTT(Number Theoretic Transform) 연산을 수행하는 단계와, 상기 다항식을 저장하는 제1 메모리, 상기 트위들 팩터를 저장하는 제2 메모리 및 상기 NTT 연산을 수행하는 NTT 모듈을 제어하는 단계를 포함하고, 상기 NTT 연산을 수행하는 단계는, 복수의 BU(Butterfly Unit)로 구성된 BU 어레이(array)를 이용하여 상기 다항식의 계수에 대한 모듈러 연산을 수행함으로써 상기 NTT 연산을 수행하는 단계를 포함한다.
상기 BU 어레이는, 상기 복수의 BU가 2 차원으로 배열됨으로써 구성될 수 있다.
상기 다항식은 제1 계수 및 제2 계수를 포함하고, 상기 복수의 BU(Butterfly Unit)로 구성된 BU 어레이(array)를 이용하여 상기 NTT 연산을 수행하는 단계는, 상기 트위들 팩터와 상기 제2 계수의 곱셈을 수행하는 단계와, 상기 곱셈의 결과 대하여 모듈러 리덕션을 수행하는 단계와, 상기 모듈러 리덕션의 결과와 상기 제1 계수의 덧셈을 수행하는 단계와, 상기 덧셈의 결과에 모듈러 애디션(modular addition)을 수행하는 단계와, 상기 제1 계수와 상기 모듈러 리덕션의 결과 간의 뺄셈을 수행하는 단계와, 상기 뺄셈의 결과에 모듈러 섭트랙션 연산을 수행하는 단계를 포함할 수 있다.
상기 NTT 연산은, 미리 결정된 개수의 스테이지(stage)를 포함하고, 상기 NTT를 연산을 수행하는 단계는, 상기 미리 결정된 개수에 대응하는 기수(radix)에 기초하여 NTT 연산을 수행하는 단계를 포함할 수 있다.
상기 미리 결정된 개수는, 상기 다항식의 차수에 기초하여 결정될 수 있다.
상기 트위들 팩터는, 상기 다항식의 차수에 기초하여 결정될 수 있다.
상기 트위들 팩터를 저장하는 단계는, 상기 다항식의 차수에 기초하여 결정된 개수의 메모리 뱅크에 비트 반전 순서(bit-reversed order)로 상기 트위들 팩터를 저장하는 단계를 포함할 수 있다.
상기 제어하는 단계는, 상기 NTT 모듈의 반복 횟수(iteration)를 결정하는 단계와, 상기 복수의 BU의 진행 단계에 따른 입력 계수를 받아오는 수를 측정하는 단계와, 상기 제1 메모리의 읽기 및 쓰기를 수행하기 위한 주소를 생성하는 단계를 포함할 수 있다.
상기 제어하는 단계는, 상기 주소에 기초하여 상기 제1 메모리에 상기 다항식의 계수를 쓰기(write) 위한 뱅크 주소 및 순서(order)를 생성하는 단계와, 상기 주소에 기초하여 상기 제1 메모리로부터 상기 다항식의 계수를 읽고, 상기 제2 메모리로부터 상기 트위들 팩터를 읽기 위한 뱅크 주소 및 순서를 생성하는 단계를 더 포함할 수 있다.
상기 NTT 연산을 수행하는 단계는, 상기 주소를 이용하여 각각의 이터레이션 동안 상기 제1 메모리로부터 상기 다항식의 차수에 기초하여 결정된 입력 개수를 불러오는 단계와, NTT 연산 결과를 상기 주소에 저장하는 단계를 포함할 수 있다.
도 1은 동형 암호 연산 장치의 개략적인 블록도를 나타낸다.
도 2는 도 1에 도시된 동형 암호 연산 장치의 구현의 예를 나타낸다.
도 3은 NTT 연산의 흐름도의 예를 나타낸다.
도 4는 FPGA 기반 동형 암호 연산 장치의 구현의 일 예를 나타낸다.
도 5는 NTT 연산 알고리즘의 일 예를 나타낸다.
도 6은 DRAM의 데이터 저장의 블록도의 일 예를 나타낸다.
도 7은 트위들 팩터 메모리의 블록도의 일 예를 나타낸다.
도 8은 도 1에 도시된 동형 암호 연산 장치의 메모리 접근 방식의 예를 나타낸다.
도 9a 내지 도 9c는 도 1에 도시된 동형 암호 연산 장치의 데이터 접근 방식을 설명하기 위한 도면이다.
도 10은 이터레이션에 따른 읽기 및 쓰기 동작의 예를 나타낸다.
도 11은 NTT 모듈의 구현의 일 예를 나타낸다.
도 12는 INTT 모듈의 구현의 일 예를 나타낸다.
도 13은 도 11에 도시된 BU1의 구현의 예를 나타낸다.
도 14는 도 12에 도시된 BU2의 구현의 예를 나타낸다.
도 15는 도 12에 도시된 BU0의 구현의 예를 나타낸다.
도 16은 모듈러 멀티플라이어의 구현의 예를 나타낸다.
도 17은 FPGA 기반 동형 암호 연산 장치의 구현의 다른 예를 나타낸다.
도 18은 NTT 연산 알고리즘의 다른 예를 나타낸다.
도 19는 DRAM의 데이터 저장의 블록도의 다른 예를 나타낸다.
도 20은 트위들 팩터 메모리의 블록도의 다른 예를 나타낸다.
도 21은 NTT 모듈의 구현의 다른 예를 나타낸다.
도 22는 INTT 모듈의 구현의 다른 예를 나타낸다.
도 23은 파이프라인의 형태로 수행되는 NTT 연산의 흐름도의 예를 나타낸다.
도 24는 NTT 연산의 흐름도의 예를 나타낸다.
도 25는 도 1에 도시된 동형 암호 연산 장치의 동작의 흐름도를 나타낸다.
실시예들에 대한 특정한 구조적 또는 기능적 설명들은 단지 예시를 위한 목적으로 개시된 것으로서, 다양한 형태로 변경되어 구현될 수 있다. 따라서, 실제 구현되는 형태는 개시된 특정 실시예로만 한정되는 것이 아니며, 본 명세서의 범위는 실시예들로 설명한 기술적 사상에 포함되는 변경, 균등물, 또는 대체물을 포함한다.
제1 또는 제2 등의 용어를 다양한 구성요소들을 설명하는데 사용될 수 있지만, 이런 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 해석되어야 한다. 예를 들어, 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소는 제1 구성요소로도 명명될 수 있다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다.
단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 설명된 특징, 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것이 존재함으로 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부분품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 해당 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가진다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥상 가지는 의미와 일치하는 의미를 갖는 것으로 해석되어야 하며, 본 명세서에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하, 실시예들을 첨부된 도면들을 참조하여 상세하게 설명한다. 첨부 도면을 참조하여 설명함에 있어, 도면 부호에 관계없이 동일한 구성 요소는 동일한 참조 부호를 부여하고, 이에 대한 중복되는 설명은 생략하기로 한다.
본 명세서에서의 모듈(module)은 본 명세서에서 설명되는 각 명칭에 따른 기능과 동작을 수행할 수 있는 하드웨어를 의미할 수도 있고, 특정 기능과 동작을 수행할 수 있는 컴퓨터 프로그램 코드를 의미할 수도 있고, 또는 특정 기능과 동작을 수행시킬 수 있는 컴퓨터 프로그램 코드가 탑재된 전자적 기록 매체, 예를 들어 프로세서 또는 마이크로 프로세서를 의미할 수 있다.
다시 말해, 모듈이란 본 발명의 기술적 사상을 수행하기 위한 하드웨어 및/또는 상기 하드웨어를 구동하기 위한 소프트웨어의 기능적 및/또는 구조적 결합을 의미할 수 있다.
도 1은 동형 암호 연산 장치의 개략적인 블록도를 나타낸다.
도 1을 참조하면, 동형 암호 연산 장치(10)는 동형 암호 연산을 수행할 수 있다. 동형 암호는 데이터가 암호화된 상태에서 연산을 수행할 수 있는 암호화 방식을 의미할 수 있다. 동형 암호 연산은 암호화된 데이터 간의 연산을 수행하기 위해 필요한 다양한 연산을 포함할 수 있다. 동형 암호 연산은 사이퍼텍스트의 모듈러스 리프레시, 사이퍼텍스트 간의 동형 연산을 포함할 수 있다. 사이퍼텍스트는 플레인텍스트를 암호화함으로써 획득된 암호화된 데이터를 의미할 수 있다.
동형 암호 연산 장치(10)는 다항식을 처리함으로써 동형 암호 연산 결과를 출력할 수 있다. 동형 암호 연산 장치(10)는 제1 메모리(100), 제2 메모리(200), NTT(Number Theoretic Transform) 모듈(300) 및 컨트롤러(400)를 포함할 수 있다.
제1 메모리(100) 및 제2 메모리(200)는 연산을 위한 데이터 또는 연산 결과를 저장할 수 있다. 제1 메모리(100) 및 제2 메모리(200)는 프로세서에 의해 실행가능한 인스트럭션들(또는 프로그램)을 저장할 수 있다. 예를 들어, 인스트럭션들은 프로세서의 동작 및/또는 프로세서의 각 구성의 동작을 실행하기 위한 인스트럭션들을 포함할 수 있다.
제1 메모리(100) 및 제2 메모리(200)는 휘발성 메모리 장치 또는 비휘발성 메모리 장치로 구현될 수 있다.
휘발성 메모리 장치는 DRAM(dynamic random access memory), SRAM(static random access memory), T-RAM(thyristor RAM), Z-RAM(zero capacitor RAM), 또는 TTRAM(Twin Transistor RAM)으로 구현될 수 있다.
비휘발성 메모리 장치는 EEPROM(Electrically Erasable Programmable Read-Only Memory), 플래시(flash) 메모리, MRAM(Magnetic RAM), 스핀전달토크 MRAM(Spin-Transfer Torque(STT)-MRAM), Conductive Bridging RAM(CBRAM), FeRAM(Ferroelectric RAM), PRAM(Phase change RAM), 저항 메모리(Resistive RAM(RRAM)), 나노 튜브 RRAM(Nanotube RRAM), 폴리머 RAM(Polymer RAM(PoRAM)), 나노 부유 게이트 메모리(Nano Floating Gate Memory(NFGM)), 홀로그래픽 메모리(holographic memory), 분자 전자 메모리 소자(Molecular Electronic Memory Device), 또는 절연 저항 변화 메모리(Insulator Resistance Change Memory)로 구현될 수 있다.
제1 메모리(100)는 다항식을 수신하여 저장할 수 있다. 다항식은 플레인텍스트를 암호화하여 사이퍼텍스트를 생성하기 위한 다항식 또는 사이퍼텍스트 간의 동형 암호 연산을 수행하기 위한 다항식을 포함할 수 있다.
제2 메모리(200)는 트위들 팩터를 저장할 수 있다. 트위들 팩터는 변환 알고리즘에서 데이터에 곱해지는 임의의 상수일 수 있다. 임의의 상수는 삼각 상수 계수(trigonometric contant coefficients)를 포함할 수 있다. 트위들 팩터는 다항식의 차수에 기초하여 결정될 수 있다. 제2 메모리(200)는 다항식의 차수에 기초하여 결정된 개수의 메모리 뱅크에 비트 반전 순서(bit-reversed order)로 트위들 팩터를 저장할 수 있다.
NTT 모듈(300)은 트위들 팩터에 기초하여 다항식에 NTT 연산을 수행할 수 있다. NTT 연산은 소수(prime)로 이루어진 정수 모듈로(modulo) 값을 갖는 이산 퓨리에 변환(descrete Fourier transform)을 의미할 수 있다.
NTT 모듈(300)은 복수의 BU(Butterfly Unit)로 구성된 BU 어레이(array)를 포함할 수 있다. BU는 도 13 내지 도 15를 참조하여 자세하게 설명한다. BU는 다항식의 계수에 대한 모듈러 연산을 수행할 수 있다. 다항식은 제1 계수 및 제2 계수를 포함할 수 있다.
NTT 연산은 미리 결정된 개수의 스테이지(stage)를 포함하고, NTT 모듈(300)은 미리 결정된 개수에 대응하는 기수(radix)에 기초하여 NTT 연산을 수행할 수 있다. 미리 결정된 개수는 다항식의 차수에 기초하여 결정될 수 있다.
NTT 모듈(300)은 제1 메모리(100)의 읽기 및 쓰기를 수행하기 위한 주소를 이용하여 각각의 이터레이션 동안 제1 메모리(100)로부터 다항식의 차수에 기초하여 결정된 입력 개수를 불러오고, NTT 연산 결과를 주소에 저장할 수 있다.
BU 어레이는 복수의 BU가 2 차원으로 배열됨으로써 구성될 수 있다. 복수의 BU 각각은, 트위들 팩터와 제2 계수의 곱셈을 수행하는 곱셈기, 곱셈기의 출력에 대하여 모듈러 리덕션을 수행하는 모듈러 리덕션 연산기, 모듈러 리덕션 연산기의 출력과 제1 계수를 더하는 덧셈기, 덧셈기의 출력에 모듈러 애디션(modular addition)을 수행하는 모듈러 애디션 수행기, 제1 계수와 모듈러 리덕션 연산기의 출력의 뺄셈을 수행하는 뺄셈기 및 뺄셈기의 출력에 모듈러 섭트랙션 연산을 수행하는 모듈러 섭트랙션 연산기를 포함할 수 있다.
컨트롤러(400)는 프로세서를 포함할 수 있다. 프로세서는 메모리(예: 제1 메모리(100) 또는 제2 메모리(200))에 저장된 데이터를 처리할 수 있다. 프로세서는 메모리에 저장된 컴퓨터로 읽을 수 있는 코드(예를 들어, 소프트웨어) 및 프로세서에 의해 유발된 인스트럭션(instruction)들을 실행할 수 있다.
"프로세서"는 목적하는 동작들(desired operations)을 실행시키기 위한 물리적인 구조를 갖는 회로를 가지는 하드웨어로 구현된 데이터 처리 장치일 수 있다. 예를 들어, 목적하는 동작들은 프로그램에 포함된 코드(code) 또는 인스트럭션들(instructions)을 포함할 수 있다.
예를 들어, 하드웨어로 구현된 데이터 처리 장치는 마이크로프로세서(microprocessor), 중앙 처리 장치(central processing unit), 프로세서 코어(processor core), 멀티-코어 프로세서(multi-core processor), 멀티프로세서(multiprocessor), ASIC(Application-Specific Integrated Circuit), FPGA(Field Programmable Gate Array)를 포함할 수 있다.
컨트롤러(400)는 제1 메모리(100), 제2 메모리(200) 및 NTT 모듈(300)을 제어할 수 있다. 컨트롤러(400)는 NTT 모듈의 반복 횟수(iteration)를 결정할 수 있다. 컨트롤러(400)는 복수의 BU의 진행 단계에 따른 입력 계수를 받아오는 수를 측정할 수 있다. 컨트롤러(400)는 제1 메모리(100)의 읽기 및 쓰기를 수행하기 위한 주소를 생성할 수 있다.
컨트롤러(400)는 주소에 기초하여 제1 메모리(100)에 다항식의 계수를 쓰기(write) 위한 뱅크 주소 및 순서(order)를 생성할 수 있다. 컨트롤러(400)는 주소에 기초하여 제1 메모리(100)로부터 다항식의 계수를 읽고, 제2 메모리로부터 트위들 팩터를 읽기 위한 뱅크 주소 및 순서를 생성할 수 있다.
도 2는 도 1에 도시된 동형 암호 연산 장치의 구현의 예를 나타낸다.
도 2를 참조하면, 동형 암호 연산 장치(10)는 NTT 아키텍처를 포함할 수 있다. NTT 아키텍처는 데이터 메모리(210)(예: 도 1의 제1 메모리(100)), NTT 모듈(230)(예: 도 1의 NTT 모듈(300)), 트위들 팩터 메모리(250)(예: 도 1의 제2 메모리(200)) 및 탑 컨트롤 유닛(270)(예: 도 1의 컨트롤러(400))를 포함할 수 있다.
NTT 모듈(230)은 높은 데이터 처리의 NTT 연산을 수행하기 위해서 2 차원 어레이 형태의 BU 로 구성될 수 있고, 복수의 이터레이션 동안NTT 연산을 수행할 수 있다.
데이터 메모리(210) 및 트위들 팩터 메모리(250)는 충돌 없는 메모리 접근 패턴을 사용하여 입력 다항식 및 중간 결과를 저장할 수 있다. 데이터 메모리(210) 및 트위들 팩터 메모리(250)은 다항식 크기의 온-칩(on-chip) 메모리 블록을 포함할 수 있다. 트위들 팩터 메모리(250)는 선택한 모듈에 해당하는 미리 계산된 트위들 팩터를 저장할 수 있다.
NTT 아키텍처는 격자기반 완전 동형암호 체계에 대한 작업을 수행하기 위해 60비트 크기 및 216크기의 다항식을 사용하여 NTT 연산을 수행할 수 있다.
복수의 BU들은 2차원 배열 형태로 (r*c)의 BU 어레이로 그룹화되어 구성될 수 있다. 예를 들어, BU 어레이는 32개의 BU가 8*4의 형태로 배열된 것일 수 있다. 8*4-BU 배열은 각 단계에서 8개의 BU로 순차적으로 연결된 4개의 연산 단계로 구성되며, 단계 간의 연결은 NTT연산을 위한 십진법을 따를 수 있다.
탑 컨트롤 유닛(270)은 여러 NTT 연산 반복에서 작동하도록 NTT 모듈(230)을 제어할 수 있다. 탑 컨트롤 유닛(270)은 NTT 아키텍처의 전체 동작을 제어할 수 있다. 로컬 컨트롤 회로는 각각 데이터 메모리(210), 트위들 팩터 메모리(250) 및 NTT 모듈(230)을 제어할 수 있다.
탑 컨트롤 유닛(270)은 데이터 메모리(210)에 접근하기 위해서 로컬 컨트롤 회로를 이용하여 충돌 없는 읽기 또는 쓰기 패턴을 가능하게 할 수 있다. 로컬 컨트롤 회로는 읽기 또는 쓰기 컨트롤러를 포함할 수 있고, 이터레이션에 따라 쓰기 컨트롤러와 읽기 컨트롤러는 FSM(Finite Stage Machine)을 사용하여 쓰기 및 읽기 작업을 처리할 수 있다.
log2(n)단계의 n 크기의 다항식의 경우 FSM 스테이트의 수(예: 이터레이션)는 log2(n) 또는 log2(2r)의 올림으로 계산될 수 있다. 읽기 또는 쓰기의 주소는 반복을 통해서 변경될 수 있다.
동형 암호 연산 장치(10)는 NTT 또는 INTT 구조의 트위들 팩터의 저장 방식을 이용하여 NTT 또는 INTT 모듈에서 효율적인 BU 연산을 수행할 수 있다.
데이터 메모리(210)는 2*r의 뱅크 RAM으로 구성될 수 있다. 예를 들어, 8*4 BU 배열 NTT 모듈의 경우 로컬 컨트롤 회로를 통해 데이터 메모리(예: 온 칩 데이터 메모리)에서 각각 16개의 계수를 읽고 쓸 수 있다.
트위들 팩터 메모리(250)는 다중 온 칩 데이터 메모리를 사용할 수 있다. 트위들 팩터 세트의 수는 사용 모듈 수에 따라 상이할 수 있다. r*c BU 배열이 있는 NTT 모듈(230)에서는 2*r 계수에 대한 각 NTT 연산에 대해 (2*r-1)의 TF 상수가 요구될 수 있다. 따라서, 트위들 팩터 메모리(250)(예: 온 칩 트위들 팩터 메모리)는 각 TF의 모음을 저장하기 위해 (2*r-1)개의 뱅크로 구성될 수 있다. 온칩 트위들 팩터 메모리는 로컬 컨트롤 회로에 의해 제어될 수 있다.
동형 암호 연산 장치(10)는 데이터 처리를 향상시키기 위해 16*5-BU 배열을 이용하여 쉽게 NTT 구조를 확장할 수 있다. NTT 구조를 확장하더라도 데이터 메모리(210) 및 트위들 팩터 메모리(250)는 전체 메모리 크기를 변경하지 않고 메모리 블록의 행과 열의 크기만 조절될 수 있다.
NTT 모듈(230)은 입력, 출력 및 메모리 인터페이스를 줄이기 위해 BU의 2 차원 어레이 구조를 가질 수 있다. NTT 모듈(230)에서 k개의 계산 단계를 결합하면 log(n)에서 log(n)/k로 이터레이션의 수가 줄어들어 메모리(예: 데이터 메모리(210) 또는 트위들 팩터 메모리(250))의 읽기 또는 쓰기 패턴의 하드웨어 복잡도를 단순화할 수 있다.
동형 응용 프로그램의 매개 변수 집합(예: N=216 , 크기 60 비트의 q)을 사용할 경우, NTT 모듈(230)은 8개의 행과 4개의 열 형태로 배열된 32개의 BU로 구성될 수 있다. NTT 모듈(230)은 4개의 스테이지로 부분 연산을 수행하며 전체 입력 다항식 연산을 마치려면 4번의 반복이 필요할 수 있다. 스테이지의 수는 예시적인 것으로, 실시예에 따라 스테이지의 수는 상이할 수 있다.
NTT 모듈(230)은 효율적인 메모리 접근을 위해 충돌하지 않는 주소의 입력 계수를 메모리 블록에 배열할 수 있다. 메모리의 뱅크 주소는 수학식 1과 같이 나타낼 수 있고, 순서(order)는 수학식 2와 같을 수 있다.
Figure pat00001
Figure pat00002
여기서, BU는 NTT 모듈(230)의 행의 개수(예: 도 2에서 8개)이고, L=log2(2BU)이고, addr는 입력 계수의 차수(예: 0 ~ n-1)일 수 있다. 뱅크 주소(BankAddr) 및 순서(Order)는 각각 뱅크 주소와 새로운 순서를 정의할 수 있다.
트위들 팩터 메모리(250)는 NTT 모듈(230)에서 일정한 곱셈을 효율적으로 하기 위하여 트위들 팩터를 저장할 수 있다. 예를 들어, 트위들 팩터는 4 개의 반복에 해당하는 4 개의 스테이지로 나뉠 수 있고, 각 부분은 4개의 BU 스테이지를 통해 순차적으로 접근될 수 있다. NTT 모듈(230)은 병렬 및 파이프라인 방식으로 부분적인 연산을 수행할 수 있다.
도 3은 NTT 연산의 흐름도의 일 예를 나타낸다.
도 3을 참조하면, 동형 암호 연산 장치(예: 도 1의 동형 암호 연산 장치(10))는 다항식의 계수를 연속적으로 사용하고, NTT 모듈(예: 도 1의 NTT 모듈(300))에서 반복을 위해 복수(예: 16개)의 계수를 순차적으로 읽을 수 있다. NTT 모듈(300)은 NTT 연산의 수행 결과 획득한 계수를 메모리(예: 도 1의 제1 메모리(100))에 즉시 저장할 수 있다. 저장된 계수들은 4 번의 반복을 마친 후 다른 연산을 위해 전송될 수 있다. 메모리는 다음 연산에 사용될 다항식을 저장할 수 있다.
NTT의 지연 시간은 4개로 반복되는 지연 시간의 합일 수 있다. 하나의 이터레이션에서는 radix-24 NTT연산이 4096 사이클(cycle) 동안 수행될 수 있다. NTT 연산의 최종 지연 시간은 대략
Figure pat00003
사이클 동안 누적될 수 있다.
NTT 모듈(300)은 최대 62비트 크기의 소수를 지원하고 62비트 이상의 소수를 지원할 수 있다. NTT 모듈(300)은 하드웨어 복잡도를 줄이고, NTT 연산의 처리 시간을 절약하고, 복잡한 계산을 가속화할 수 있다. 이를 통해, NTT 모듈(300)은 CKKS(Cheon-Kim-Kim-Song) 기반 동형암호 시스템의 데이터 처리량을 증가시킬 수 있다.
동형 암호 연산 장치(10)는 최대 60비트 소수를 이용하는 이터러티브 어레이(iterative array) NTT/INTT구조를 포함하고, 216 다항식 차수를 지원할 수 있다. 동형 암호 연산 장치(10)의 NTT/INTT 아키텍처는 2 차원 구조(예: 8*4, 16*5) 형태로 구성된 BU 어레이를 이용함으로써 1 차원 NTT 모듈에 비해 I/O(Input/Output) 및 메모리 인터페이스 대역폭을 효과적으로 감소시킬 수 있다.
종래의 NTT 연산 방식은 32개의 NTT 코어를 병렬적으로 처리하여 64개의 입력 계수를 연산하고, 이때 32개의 NTT 코어가 n = 216 이라면 16번의 반복을 실행해야 하기 때문에 데이터 메모리에 16번 접근해야 하므로, 많은 양의 레지스터와 하드웨어를 사용한다. 또한 최대 32개의 NTT 코어만을 사용할 수 있기 때문에 성능 확장이 불가능하다.
동형 암호 연산 장치(10)는 중간 결과를 저장하기 위한 통합 데이터 메모리 블록을 사용하면 효율적인 액세스 패턴을 설계하기 어려워지는 문제를 해결하기 위해 충돌하지 않는 데이터 주소 체계(non-conflict data address scheme)를 사용할 수 있다. 충돌하지 않는 데이터 주소 체계는 각 다항식에 대해 하나의 데이터 메모리 블록만 필요로 하여 읽기 또는 쓰기 패턴의 하드웨어 복잡성을 크게 줄일 수 있다.
동형 암호 연산 장치(10)는 트위들 팩터의 효율적인 저장 구조를 이용해 NTT 모듈(300)의 계산을 효율적으로 수행할 수 있다. NTT 모듈(300)은 최대 62비트 크기의 소수 및 더 높은 차수로 확장하는데 용이한 구조를 이용함으로써 하드웨어 복잡도와 비용을 절약하고, 처리 시간을 줄이며 전체 동형 암호 시스템의 처리량을 높일 수 있다.
도 3의 예시는 NTT 연산의 데이터 흐름도를 나타낼 수 있다. NTT연산은 4개의 스테이지로 구성된 NTT 모듈을 4번 반복하여 수행될 수 있다. NTT연산의 흐름은 순차적으로 다항식 계수를 메모리에 쓰고, 반복을 위한 16개의 계수를 NTT 모듈로 읽어 들이고, NTT 계산을 수행하고, 결과를 다시 메모리에 저장하는 것으로 구성될 수 있다.
도 3의 예시에서, iteration-1은 4개의 스테이지가 수행된 단계를 나타낼 수 있다. 이터레이션 한 번은 스테이지 4 개를 포함하고, 각 스테이지에서는 스텝 카운터를 통해 입력되는 입력 계수들의 데이터 메모리 주소와 동작 신호가 전달될 수 있다. 4개의 스테이지가 종료되면 이터레이션 카운터가 증가되고, 다음 이터레이션의 연산이 수행될 수 있다. 이 때, 이터레이션 카운트와 스텝 카운트를 통해 입력 계수와 트위들 팩터가 불려올 수 있다.
NTT 연산은 각 입력 다항식에 대한 변환을 완료하기 위해 NTT 모듈의 4번의 반복이 요구될 수 있다. NTT 연산의 지연은 4번의 반복의 지연의 합으로 계산되고, 각 반복은 radix-24에서 4096회 수행될 수 있다. 이에 따른 NTT 연산의 지연은
Figure pat00004
사이클 일 수 있다.
도 4는 FPGA 기반 동형 암호 연산 장치의 구현의 일 예를 나타내고, 도 5는 NTT 연산 알고리즘의 일 예를 나타낸다.
도 4 및 도 5를 참조하면, 동형 암호 연산 장치(10)는 이니셜 모듈(410), DRAM(420), 쓰기 제어 모듈(430), 읽기 제어 모듈(440), 탑 컨트롤 유닛(450)(예: 도 2의 탑 컨트롤 유닛(270)), 데이터 메모리(460)(예: 도 2의 데이터 메모리(210)), 트위들 팩터 메모리(470)(예: 도 2의 트위들 팩터 메모리(250)) 및 NTT 모듈(480)(예: 도 2의 NTT 모듈(230))을 포함할 수 있다.
이니셜 모듈(410)은 NTT 연산에 필요한 파라미터들을 초기화할 수 있다. DRAM(420)은 NTT 연산을 수행할 다항식 및 NTT 연산을 마친 다항식을 저장할 수 있다. DRAM(420)은 NTT 연산에 사용되는 트위들 팩터를 저장하고 있어, NTT 연산을 수행할 때 로컬 메모리로 트위들 팩터를 전달할 수 있다.
쓰기 제어 모듈(430)은 메모리(예: DRAM(420), 데이터 메모리(460) 또는 트위들 팩터 메모리(470)의 쓰기 작업을 관리할 수 있다. 쓰기 제어 모듈(430)은 어드레드 로직 모듈에서 생성된 주소 및 제어 신호에 기초하여 다항식의 계수와 트위들 팩터를 쓰기 위한 뱅크 주소 및 순서(order)를 생성할 수 있다.
읽기 제어 모듈(440)은 메모리의 읽기 작업을 관리할 수 있다. 어드레스 로직에서 생성된 주소 및 제어 신호에 따라 다항식의 계수와 TF를 읽어 오기 위한 뱅크 주소 및 순서를 생성할 수 있다.
탑 컨트롤 유닛(450)은 이니셜 데이터(410)를 수신하고, 쓰기 제어 신호(430) 및 읽기 제어 신호(440)를 수신하여 데이터 메모리(460) 및 트위들 팩터 메모리(470)를 제어할 수 있다.
이터레이션 카운터는 NTT 모듈의 반복 횟수를 관리할 수 있다. 스텝 카운터는 NTT 모듈에서 BU의 진행 단계를 관리할 수 있다. 예를 들어, 16 개의 입력 계수를 한 번에 계산하기 때문에, 스텝 카운터는 4096 번의 입력 계수를 받아오는 횟수를 측정할 수 있다.
어드레스 로직은 데이터 메모리(460)에서 읽기 또는 쓰기를 진행할 주소를 생성할 수 있다. 컨트롤 로직은 다른 모듈을 순서에 맞게 제어하기 위한 제어 신호를 생성할 수 있다.
NTT 모듈(480)은 도 5의 알고리즘(예: 혼합 기수(mixed-radix) 알고리즘)을 이용하여 동작할 수 있다. NTT 모듈(480)은 다항식의 차수 N=216에서 k1=k=4 일 때, NTT 연산은 radix-24로 동작하고, 4개의 스테이지로 구성된 NTT 모듈(480)을 4번 반복하는 방법으로 동작할 수 있다. 도 5의 알고리즘에서 4개의 NTT 모듈(480)의 반복은 k와 같을 수 있다. 4개의 스테이지는 k1으로 나타낼 수 있다.
NTT 모듈(480)은 한 번의 NTT 연산에서 32개 코어가 8개의 병렬 연산을 수행하고, 4번 연속적으로 실행하여 입력, 출력 및 메모리 인터페이스의 대역폭을 효과적으로 감소시킬 수 있다.
트위들 팩터 메모리(470)는 4스테이지 동작에 맞춰 4개의 세트로 나뉘어 트위들 팩터를 저장할 수 있고, NTT 모듈(480)은 십진법(DIT) 알고리즘에서 동작할 수 있다.
다른 실시예에서, 동형 암호 연산 장치(10)는 k=5일 때, radix-25로 동작할 수 있고, 3+1스테이지로 동작할 수 있다. 다시 말해, 동형 암호 연산 장치(10)는 3회의 스테이지에 대응하는 NTT 연산을 수행하고, 추가적으로 1 개의 스테이지에 대응하는 NTT 연산을 수행할 수 있다. 동형 암호 연산 장치(10)는 k1, k2를 다르게 조합하여 N=217, 218 과 같이 다항식 차수가 더 큰 상황에도 동형 암호 연산을 수행할 수 있다.
도 5의 알고리즘 1은 크기 n의 다항식에 대해 radix-2k1의 NTT 연산을 수행하는 경우를 나타낼 수 있다. 도 5의 예시에서, n = 216에서 k1 =4, k =4일 수 있다. NTT연산은 위 알고리즘에서 k1번의 stage를 실행하고, k번의 반복을 한다. 2k1-포인트의 NTT는 radix-2 NTT의 빠른 반복으로 사용될 수 있다. 2k1-포인트의 NTT 연산이
Figure pat00005
번 실행된 이후, 다음 NTT 연산을 위해 재정렬이 수행될 수 있다.
도 6은 DRAM의 데이터 저장의 블록도의 일 예를 나타낸다.
도 6을 참조하면, DRAM(예: 도 4의 DRAM(420))은 매 스테이지를 반복하면서 계산된 다항식의 계수(예: 입력 또는 중간 결과)를 저장할 수 있다. DRAM은 도 6의 예시와 같이 뱅크 주소 및 순서에 따라 계수를 순서대로 저장할 수 있다.
다항식의 차수 N=216일 때, 데이터 메모리(예: 도 4의 데이터 메모리(460))의 블록은 16개의 뱅크와 4096개의 주소로 나누어질 수 있다. NTT 모듈(예: 도 4의 NTT 모듈(480))은 충돌하지 않는 접근 방식으로 매 반복마다 데이터 메모리(460)에서 순서대로 16개에 해당하는 입력의 개수를 16개의 뱅크로부터 불러올 수 있다. NTT 모듈(예: 도 4의 NTT 모듈(480))의 계산 결과는 동일한 주소에 다시 저장될 수 있다. 숫자는 저장 위치에서 해당하는 입력 계수 순서를 정의할 수 있다.
메모리(예: 데이터 메모리(460))의 저장 공간의 크기는 다항식의 차수와 같을 수 있다. 뱅크 주소는 입력하는 계수에 대응하는 뱅크 주소를 의미할 수 있다. BU는 NTT 모듈(480)에서 카로 크기(예: 8*4에서 8)을 의미하고, L=log2(2BU)일 수 있다. Addr은 해당 bank에서 불러온 원래 주소(예: 0 ~ n-1)일 수 있고, Order는 해당 뱅크의 입력되는 계수의 새로운 주소를 의미할 수 있다. 메모리의 뱅크 주소는 입력 계수의 크기와 같을 수 있다.
도 7은 트위들 팩터 메모리의 블록도의 일 예를 나타낸다.
도 7을 참조하면, 트위들 팩터 메모리(예: 도 4의 트위들 팩터 메모리(470))는 NTT 연산에 필요한 트위들 팩터를 저장할 수 있다. 트위들 팩터는 다항식의 차수와 소수에 따라 결정될 수 있다. 예를 들어, 4단계의 8*4 NTT 모듈에서 16개의 계수를 입력 받아 계산하기 위해서는 동시에 15개의 트위들 팩터가 요구될 수 있다. 트위들 팩터는 도 7의 예시와 같은 구조를 갖는 15개의 메모리 뱅크에 비트 반전순서(bit-reversed order)로 저장될 수 있다.
트위들 팩터 메모리(470)의 메모리 블록은 15개의 뱅크와 4369개의 주소로 나뉠 수 있다. NTT 모듈(예: 도 1의 NTT 모듈(300))의 동작 시 15개의 트위들 팩터가 필요할 수 있고, 트위들 팩터는 15개의 뱅크로부터 순서대로 불려올 수 있다.
도 7의 예시에서, 트위들 팩터는 NTT 모듈(300)의 4 번의 이터레이션을 위해 4 부분으로 구분될 수 있다. 도 7에 기재된 숫자는 저장 위치에 해당하는 입력 계수 순서를 정의할 수 있다. 표의 우측에 기재된 숫자(0, 1, ??, 4368)는 입력 회전 계수의 위치를 정의할 수 있다.
도 8은 도 1에 도시된 동형 암호 연산 장치의 메모리 접근 방식의 예를 나타낸다.
도 8을 참조하면, N=16일 경우, NTT 연산은 도 8과 같이 스테이지에 따른 메모리 접근이 수행될 수 있다. 트위들 팩터는
Figure pat00006
로 표기뒤고 비트 반전 순서로 나열될 수 있다.
도 9a 내지 도 9c는 도 1에 도시된 동형 암호 연산 장치의 데이터 접근 방식을 설명하기 위한 도면이고, 도 10은 이터레이션에 따른 읽기 및 쓰기 동작의 예를 나타낸다.
도 9a 내지 도 10을 참조하면, NTT 모듈(예: 도 1의 NTT 모듈(300))이 2*2 BU 어레이로 구성되는 경우, NTT 모듈(300)은 두 번의 이터레이션에서 16 포인트 다항식의 NTT 연산을 수행할 수 있다. 도 9b는 데이터 메모리(예: 도 2의 데이터 메모리(210))의 데이터 접근 방식을 나타낼 수 있다. BU 어레이의 구조는 데이터 메모리 주소의 충돌이 없는 접근 방식일 수 있다.
각각의 이터레이션에서 각각의 스텝(예: 클럭 사이클(clock cycle))에 대하여, 뱅크 주소(BankAddr) 및 계수의 순서(order)는 입력 카운터로부터 계산될 수 있다. BankAddr는 메모리 뱅크의 주소를 가리키고, 순서는 대응하는 뱅크에서의 계수의 순서를 가리킬 수 있다. 계수들은 데이터 메모리(210)로부터 페치(fetch)되어 NTT 모듈(300)로 피드(feed)될 수 있다.
트위들 팩터 상수는 입력 카운터(이터레이션 및 스텝 카운터들)에 대응하는 트위들 팩터 메모리(예: 도 2의 트위틀 팩터 메모리(250))로부터 페치될 수 있다.
도 11은 NTT 모듈의 구현의 일 예를 나타낸다.
도 11을 참조하면, NTT 모듈(예: 도 2의 NTT 모듈(230))은 DIT(Decimal-in-Time) 알고리즘을 이용하여 NTT 연산을 분할하여 계산할 수 있다. BU간의 연결은 매 스테이지마다 바뀔 수 있고, 출력 계수는 입력 계수와 동일한 데이터 메모리에 다시 저장될 수 있다. 추가 파라미터 (Q, T)는 바렛 모듈러 리덕션(Barret modular reduction)을 위해 사용될 수 있다.
도 12는 INTT 모듈의 구현의 일 예를 나타낸다.
도 12를 참조하면, INTT 모듈은 DIF(Decimal-in-Frequency) 알고리즘을 이용하여 계산되며, BU간의 연결은 NTT 모듈(예: 도 2의 NTT 모듈(230))과 반대일 수 있다. 출력 계수는 입력 계수와 동일한 데이터 메모리에 다시 저장될 수 있다. 추가 파라미터(Q, T)는 바렛 모듈러 리덕션을 위해 사용될 수 있다.
INTT 모듈은 NTT 모듈(230)의 거울 대칭의 데이터 흐름을 가질 수 있다. 로컬 컨트롤 회로에서 생성된 계수 차수를 제외하고. INTT 모듈은 DIF 알고리즘에 기초하여 구성된 2차원 배열의 BU를 포함할 수 있다. 로컬 컨트롤 회로는 반복에 대응하여 FSM의 상태를 변경할 수 있다. 로컬 컨트롤 회로는 반복에 대해 FSM 상태를 변경할 수 있다.
도 13은 도 11에 도시된 BU1의 구현의 예를 나타낸다.
도 13을 참조하면, BU1은 트위들 팩터와 제2 계수의 곱셈을 수행하는 곱셈기, 곱셈기의 출력에 대하여 모듈러 리덕션을 수행하는 모듈러 리덕션 연산기, 모듈러 리덕션 연산기의 출력과 제1 계수를 더하는 덧셈기, 덧셈기의 출력에 모듈러 애디션(modular addition)을 수행하는 모듈러 애디션 수행기, 제1 계수와 모듈러 리덕션 연산기의 출력의 뺄셈을 수행하는 뺄셈기 및 뺄셈기의 출력에 모듈러 섭트랙션 연산을 수행하는 모듈러 섭트랙션 연산기를 포함할 수 있다.
BU1은 2개의 계수를 입력 받아 새로운 2개의 계수를 출력할 수 있다. BU1은 트위들 팩터를 이용한 곱셈 및 각 NTT에서 사용되는 Q값으로 모듈러스 연산을 하는 모듈러 리덕션 연산기, 동기화(synchronize)를 위한 레지스터, 덧셈 값에 모듈러스 연산을 수행하는 모듈러 애디션 수행기, 뺄셈 값에 모듈러스 연산을 수행하는 모듈러스 섭트랙션 연산기를 포함할 수 있다. 모듈러 멀티플리케이션 연산기는 바렛(Barrett) 알고리즘을 이용하여 곱셈과 모듈러 리덕션을 함께 수행할 수 있다.
도 14는 도 12에 도시된 BU2의 구현의 예를 나타낸다.
도 14를 참조하면, BU2는 2개의 계수를 입력 받아 새로운 2개의 계수를 출력할 수 있다. BU2은 트위들 팩터를 이용한 곱셈 및 모듈러 리덕션 연산기, 동기화를 위한 레지스터, 모듈러 애디션 수행기 및 모듈러 섭트랙션 연산기를 포함할 수 있다.
도 15는 도 12에 도시된 BU0의 구현의 예를 나타낸다.
도 15를 참조하면, BU0는 BU2와 달리 멀티플렉서(MUX)를 이용해서 n-1로 곱셈을 수행할 수 있다. BU0는 INTT 마지막 단계에서 1 또는 n-1을 곱하여 INTT 연산을 수행할 수 있다.
도 16은 모듈러 멀티플라이어의 구현의 예를 나타낸다.
도 16을 참조하면, 모듈러 멀티플라이어는 모듈러 멀티플리케이션(modular multiplication)을 수행할 수 있다. 모듈러 멀티플라이어는 60비트 곱셈을 수행하고 소수 Q에 대하여 모듈러 리덕션 연산을 수행할 수 있다. 모듈러 멀티플라이어는 바렛 리덕션 알고리즘을 이용하고, Q, T와의 상수 곱셈을 단순화하여 DSP(Digital Signal Proceesor)의 수를 감소시킬 수 있다.
도 17은 FPGA 기반 동형 암호 연산 장치의 구현의 다른 예를 나타내고, 도 18은 NTT 연산 알고리즘의 다른 예를 나타낸다.
도 17 및 도 18을 참조하면, NTT 모듈(예: 도 1의 NTT 모듈(300))은 radix-25를 사용하여 NTT 연산을 수행할 수 있다. 다항식의 차수는 N = 216이고 k1=5를 사용할 수 있다.
NTT 모듈(300)은 mixed radix-25를 수행하고, k2=1, k=3으로 반복이 3번 일어나는 NTT연산을 수행할 수 있다. 트위들 팩터는 3개의 계산 반복에 해당하는 3개의 세트로 나뉘어 저장될 수 있다. 즉 radix-25의 NTT가 세 번의 반복 (k=3)으로 수행되고 마지막으로 16개의 BU가 병렬로 radix-2 NTT를 수행함으로써 NTT 연산 수행이 완료될 수 있다.
NTT 모듈(300)은 도 18의 알고리즘 2를 이용하여 NTT 연산을 수행할 수 있다. 알고리즘 2는 크기 n의 다항식에 대해서 mixed-radix
Figure pat00007
의 NTT연산을 수행할 수 있다. n=216 -인 경우, 16*5의 NTT 모듈(300)을 사용한다면 log(n)이 k1으로 나누어 떨어지지 않기 때문에 알고리즘2가 사용될 수 있다.
n=216에서 k1=5, k=3, k2=1로 5개의 스테이지로 구성된 NTT 모듈(300)이 3회 반복될 수 있다. NTT 모듈(300)은 마지막 단계로 radix-2 NTT 연산을 수행할 수 있다. k, k1, k2의 선택을 통해서 n =217, n=218과 같이 확장되는 NTT 연산에도 적용될 수 있다.
도 19는 DRAM의 데이터 저장의 블록도의 다른 예를 나타낸다.
도 19를 참조하면, 도 19의 예시는 k1 = 5일 때 사용되는 데이터 메모리를 나타낼 수 있다. N = 216일 때 데이터 메모리 블록은 2048개의 주소를 가진 32개의 뱅크로 나뉠 수 있다. 한 번의 NTT 모듈이 사용될 때 충돌하지 않는 접근 방식이 사용되기 때문에 32개의 입력 계수가 순차적으로 사용될 수 있다. NTT 모듈의 연산 결과는 입력된 계수와 같은 위치에 저장될 수 있다.
도 20은 트위들 팩터 메모리의 블록도의 다른 예를 나타낸다.
도 20을 참조하면, 도 20의 트위들 메모리 블록은 세 번의 반복에 대해서 1057개의 주소를 가진 31개의 뱅크와 마지막 추가적인 radix-2 BU를 위해 2048개의 주소의 16개의 뱅크로 나뉠 수 있다. mixed-radix-25를 사용하는 NTT 모듈에서는 32개의 입력 계수가 입력될 수 있다. NTT 연산을 위해 31개의 뱅크에서 순차적으로 접근할 수 있도록 트위들 팩터가 메모리에 할당될 수 있다. 최종적으로 TF는 3번의 반복과 추가적인 1번의 radix-2연산을 위해 총 4개의 세트로 나뉠 수 있다.
도 21은 NTT 모듈의 구현의 다른 예를 나타낸다.
도 21을 참조하면, NTT 모듈(예: 도 1의 NTT 모듈(300))은 데이터 처리를 향상시키기 위해 k1=5 일때 16*5-BU 배열 기반의 NTT 구조를 가질 수 있다. NTT 모듈(300)은 높은 데이터 처리를 위해 확장될 수 있고, NTT 구조를 확장하더라도 데이터 메모리와 TF 메모리는 전체 메모리 크기를 변경하지 않고 메모리 블록의 행과 열의 크기만 조절함으로써 구현될 수 있다.
도 21의 NTT 모듈(300)은 DIT알고리즘을 수행하여 부분 NTT 연산을 수행하고, 출력 계수는 입력 계수와 동일한 주소의 데이터 메모리에 저장될 수 있다.
매개 변수(Q, T)가 Barrett 모듈 식 곱셈을 사용하기 위해 추가적으로 입력될 수 있다. 마지막 BU1과 입력을 연결하는 선은 추가적인 BU 연산을 위해 연결된 것으로, 하드웨어 복잡도를 최소화하기 위해서 데이터의 경로를 제거함으로써 사용될 수 있다.
도 22는 INTT 모듈의 구현의 다른 예를 나타낸다.
도 22를 참조하면, INTT 모듈은 DIF 알고리즘을 수행하여 추가적인 BU연산을 수행할 수 있다. BU간의 연결은 NTT 모듈과 반대일 수 있다. 출력 계수는 입력 계수와 동일한 주소의 데이터 메모리에 저장될 수 있다. BU2및 BU0는 도 14 및 도 15에서 설명한 것과 동일할 수 있다.
도 23은 파이프라인의 형태로 수행되는 NTT 연산의 흐름도의 예를 나타낸다.
도 23을 참조하면, 도 23의 예시는 다항식의 차수 N=216, radix-24에서 파이프라인의 타이밍을 나타낼 수 있다. 각 사각형은 한번의 NTT 모듈이 실행될 때, 불러오기(load), 읽기, 쓰기 및 NTT 연산을 수행하는 지연을 의미할 수 있다.
N=216, radix-24에서 NTT연산은 6가지 주요 연산으로 구성될 수 있다. 주요 연산의 수행 순서는 아래와 같을 수 있다.
1. 버퍼에 정상 순서(normal order)로 데이터 읽어 오기
2. 메모리에 순서 규칙에 따라 쓰기
3. NTT 모듈에 계수 및 트위들 팩터 읽어 오기
4. NTT 연산
5. 중간결과를 데이터 메모리에 저장하기,
6. NTT 연산의 결과를 출력하기(마지막 반복에서)
도 23의 예시에서, 6개의 연산은 완전히 파이프라인(fully pipeline)화 되어 지연시간 없이 동작할 수 있다. 마지막 반복에서 NTT 계산의 결과 출력과 다음 NTT 연산에 필요한 입력이 동시에 실행될 수 있다.
도 24는 NTT 연산의 흐름도의 예를 나타낸다.
도 24를 참조하면, 컨트롤러(예: 도 1의 컨트롤러(400))는 외부 메모리로부터 버퍼에 정상 순서로 다항식을 불러올 수 있다(2410). 컨트롤러(400)는 충돌 없는 순서로 버퍼를 주 데이터 메모리(예: 도 1의 제1 메모리(100))에 복사할 수 있다(2420).
컨트롤러(400)는 트위들 팩터에 대응하는 순서로 다항식을 읽을 수 있다(2430). 컨트롤러(400)는 입력 계수에 NTT 모듈(예: 도 1의 NTT 모듈(300))을 적용할 수 있다(2440). 컨트롤러(400)는 NTT 연산이 완료된 계수를 데이터 메모리에 다시 저장할 수 있다.
컨트롤러(400)는 반복이 끝났는지 여부를 판단할 수 있다(2460). 컨트롤러(400)는 반복이 끝나지 않은 경우, 2430의 동작을 다시 수행하고, 반복이 끝난 경우, NTT 알고리즘이 끝났는지 여부를 판단할 수 있다(2470). NTT 알고리즘이 끝나지 않은 경우, 컨트롤러(400)는 2430의 동작을 다시 수행하고, NTT 알고리즘이 끝난 경우, 2420의 동작을 수행하고, 다음 작업을 위한 NTT 결과를 출력할 수 있다(2480).
도 25는 도 1에 도시된 동형 암호 연산 장치의 동작의 흐름도를 나타낸다.
도 25를 참조하면, 제1 메모리(예: 도 1의 제1 메모리(100))는 다항식을 수신하여 저장할 수 있다(2510). 다항식은 제1 계수 및 제2 계수를 포함할 수 있다.
제2 메모리(예: 도 1의 제2 메모리(200))는 트위들 팩터를 저장할 수 있다(2530). 제2 메모리(200)는 다항식의 차수에 기초하여 결정된 개수의 메모리 뱅크에 비트 반전 순서로 트위들 팩터를 저장할 수 있다.
NTT 모듈(예: 도 1의 NTT 모듈(300))은 트위들 팩터에 기초하여 다항식에 NTT 연산을 수행할 수 있다(2550). NTT 모듈(300)은 복수의 BU로 구성된 BU 어레이를 이용하여 다항식의 계수에 대한 모듈러 연산을 수행함으로써 NTT 연산을 수행할 수 있다.
BU 어레이는 복수의 BU가 2차원으로 배열됨으로써 구성될 수 있다. 복수의 BU 각각은 트위들 팩터와 제2 계수의 곱셈을 수행하는 곱셈기, 곱셈기의 출력에 대하여 모듈러 리덕션을 수행하는 모듈러 리덕션 연산기, 모듈러 리덕션 연산기의 출력과 제1 계수를 더하는 덧셈기, 덧셈기의 출력에 모듈러 애디션(modular addition)을 수행하는 모듈러 애디션 수행기, 제1 계수와 모듈러 리덕션 연산기의 출력의 뺄셈을 수행하는 뺄셈기, 뺄셈기의 출력에 모듈러 섭트랙션 연산을 수행하는 모듈러 섭트랙션 연산기를 포함할 수 있다.
NTT 연산은 미리 결정된 개수의 스테이지(stage)를 포함하고, NTT 모듈(300)은 미리 결정된 개수에 대응하는 기수(radix)에 기초하여 NTT 연산을 수행할 수 있다. 미리 결정된 개수는, 다항식의 차수에 기초하여 결정될 수 있다. 트위들 팩터는 다항식의 차수에 기초하여 결정될 수 있다.
NTT 모듈(300)은 제1 메모리(100)의 읽기 및 쓰기를 수행하기 위한 주소를 이용하여 각각의 이터레이션 동안 제1 메모리(100)로부터 다항식의 차수에 기초하여 결정된 입력 개수를 불러올 수 있다. NTT 모듈(300)은 NTT 연산 결과를 주소에 저장할 수 있다.
컨트롤러(예: 도 1의 컨트롤러(400))는 제1 메모리(100), 제2 메모리(200), NTT 모듈(300)을 제어할 수 있다(2670). 컨트롤러(400)는 NTT 모듈(300)의 반복 횟수를 결정할 수 있다. 컨트롤러(400)는 복수의 BU의 진행 단계에 따른 입력 계수를 받아오는 수를 측정할 수 있다. 컨트롤러(400)는 제1 메모리(100)의 읽기 및 쓰기를 수행하기 위한 주소를 생성할 수 있다.
컨트롤러(400)는 주소에 기초하여 제1 메모리(100)에 다항식의 계수를 쓰기 위한 뱅크 주소 및 순서를 생성할 수 있다. 컨트롤러(400)는 주소에 기초하여 제1 메모리(400)로부터 다항식의 계수를 읽고, 제2 메모리(200)로부터 트위들 팩터를 읽기 위한 뱅크 주소 및 순서를 생성할 수 있다.
이상에서 설명된 실시예들은 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치, 방법 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 소프트웨어 애플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 컨트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있으며 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다.
위에서 설명한 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 또는 복수의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 이를 기초로 다양한 기술적 수정 및 변형을 적용할 수 있다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (20)

  1. 다항식을 수신하여 저장하는 제1 메모리;
    트위들 팩터를 저장하는 제2 메모리;
    상기 트위들 팩터에 기초하여 상기 다항식에 NTT(Number Theoretic Transform) 연산을 수행하는 NTT 모듈; 및
    상기 제1 메모리, 상기 제2 메모리 및 상기 NTT 모듈을 제어하는 컨트롤러를 포함하고,
    상기 NTT 모듈은 상기 다항식의 계수에 대한 모듈러 연산을 수행하는 복수의 BU(Butterfly Unit)로 구성된 BU 어레이(array)를 포함하는
    동형 암호 연산 장치.
  2. 제1항에 있어서,
    상기 BU 어레이는,
    상기 복수의 BU가 2 차원으로 배열됨으로써 구성되는,
    동형 암호 연산 장치.
  3. 제1항에 있어서,
    상기 다항식은 제1 계수 및 제2 계수를 포함하고,
    상기 복수의 BU 각각은,
    상기 트위들 팩터와 상기 제2 계수의 곱셈을 수행하는 곱셈기;
    상기 곱셈기의 출력에 대하여 모듈러 리덕션을 수행하는 모듈러 리덕션 연산기;
    상기 모듈러 리덕션 연산기의 출력과 상기 제1 계수를 더하는 덧셈기;
    상기 덧셈기의 출력에 모듈러 애디션(modular addition)을 수행하는 모듈러 애디션 수행기;
    상기 제1 계수와 상기 모듈러 리덕션 연산기의 출력의 뺄셈을 수행하는 뺄셈기; 및
    상기 뺄셈기의 출력에 모듈러 섭트랙션 연산을 수행하는 모듈러 섭트랙션 연산기
    를 포함하는 동형 암호 연산 장치.
  4. 제1항에 있어서,
    상기 NTT 연산은,
    미리 결정된 개수의 스테이지(stage)를 포함하고,
    상기 NTT 모듈은,
    상기 미리 결정된 개수에 대응하는 기수(radix)에 기초하여 NTT 연산을 수행하는,
    동형 암호 연산 장치.
  5. 제4항에 있어서,
    상기 미리 결정된 개수는,
    상기 다항식의 차수에 기초하여 결정되는,
    동형 암호 연산 장치.
  6. 제1항에 있어서,
    상기 트위들 팩터는,
    상기 다항식의 차수에 기초하여 결정되는,
    동형 암호 연산 장치.
  7. 제1항에 있어서,
    상기 제2 메모리는,
    상기 다항식의 차수에 기초하여 결정된 개수의 메모리 뱅크에 비트 반전 순서(bit-reversed order)로 상기 트위들 팩터를 저장하는,
    동형 암호 연산 장치.
  8. 제1항에 있어서,
    상기 컨트롤러는,
    상기 NTT 모듈의 반복 횟수(iteration)를 결정하고,
    상기 복수의 BU의 진행 단계에 따른 입력 계수를 받아오는 수를 측정하고,
    상기 제1 메모리의 읽기 및 쓰기를 수행하기 위한 주소를 생성하는,
    동형 암호 연산 장치.
  9. 제8항에 있어서,
    상기 컨트롤러는,
    상기 주소에 기초하여 상기 제1 메모리에 상기 다항식의 계수를 쓰기(write) 위한 뱅크 주소 및 순서(order)를 생성하고,
    상기 주소에 기초하여 상기 제1 메모리로부터 상기 다항식의 계수를 읽고, 상기 제2 메모리로부터 상기 트위들 팩터를 읽기 위한 뱅크 주소 및 순서를 생성하는,
    동형 암호 연산 장치.
  10. 제8항에 있어서,
    상기 NTT 모듈은
    상기 주소를 이용하여 각각의 이터레이션 동안 상기 제1 메모리로부터 상기 다항식의 차수에 기초하여 결정된 입력 개수를 불러오고,
    NTT 연산 결과를 상기 주소에 저장하는,
    동형 암호 연산 장치.
  11. 다항식을 수신하여 저장하는 단계;
    트위들 팩터를 저장하는 단계;
    상기 트위들 팩터에 기초하여 상기 다항식에 NTT(Number Theoretic Transform) 연산을 수행하는 단계;
    상기 다항식을 저장하는 제1 메모리, 상기 트위들 팩터를 저장하는 제2 메모리 및 상기 NTT 연산을 수행하는 NTT 모듈을 제어하는 단계
    를 포함하고,
    상기 NTT 연산을 수행하는 단계는,
    복수의 BU(Butterfly Unit)로 구성된 BU 어레이(array)를 이용하여 상기 다항식의 계수에 대한 모듈러 연산을 수행함으로써 상기 NTT 연산을 수행하는 단계
    를 포함하는 동형 암호 연산 방법.
  12. 제11항에 있어서,
    상기 BU 어레이는,
    상기 복수의 BU가 2 차원으로 배열됨으로써 구성되는,
    동형 암호 연산 방법.
  13. 제11항에 있어서,
    상기 다항식은 제1 계수 및 제2 계수를 포함하고,
    상기 복수의 BU(Butterfly Unit)로 구성된 BU 어레이(array)를 이용하여 상기 NTT 연산을 수행하는 단계는,
    상기 트위들 팩터와 상기 제2 계수의 곱셈을 수행하는 단계;
    상기 곱셈의 결과 대하여 모듈러 리덕션을 수행하는 단계;
    상기 모듈러 리덕션의 결과와 상기 제1 계수의 덧셈을 수행하는 단계;
    상기 덧셈의 결과에 모듈러 애디션(modular addition)을 수행하는 단계;
    상기 제1 계수와 상기 모듈러 리덕션의 결과 간의 뺄셈을 수행하는 단계; 및
    상기 뺄셈의 결과에 모듈러 섭트랙션 연산을 수행하는 단계
    를 포함하는 동형 암호 연산 방법.
  14. 제11항에 있어서,
    상기 NTT 연산은,
    미리 결정된 개수의 스테이지(stage)를 포함하고,
    상기 NTT를 연산을 수행하는 단계는,
    상기 미리 결정된 개수에 대응하는 기수(radix)에 기초하여 NTT 연산을 수행하는 단계
    를 포함하는 동형 암호 연산 방법.
  15. 제14항에 있어서,
    상기 미리 결정된 개수는,
    상기 다항식의 차수에 기초하여 결정되는,
    동형 암호 연산 방법.
  16. 제11항에 있어서,
    상기 트위들 팩터는,
    상기 다항식의 차수에 기초하여 결정되는,
    동형 암호 연산 방법.
  17. 제11항에 있어서,
    상기 트위들 팩터를 저장하는 단계는,
    상기 다항식의 차수에 기초하여 결정된 개수의 메모리 뱅크에 비트 반전 순서(bit-reversed order)로 상기 트위들 팩터를 저장하는 단계
    를 포함하는 동형 암호 연산 방법.
  18. 제11항에 있어서,
    상기 제어하는 단계는,
    상기 NTT 모듈의 반복 횟수(iteration)를 결정하는 단계;
    상기 복수의 BU의 진행 단계에 따른 입력 계수를 받아오는 수를 측정하는 단계; 및
    상기 제1 메모리의 읽기 및 쓰기를 수행하기 위한 주소를 생성하는 단계
    를 포함하는 동형 암호 연산 방법.
  19. 제18항에 있어서,
    상기 제어하는 단계는,
    상기 주소에 기초하여 상기 제1 메모리에 상기 다항식의 계수를 쓰기(write) 위한 뱅크 주소 및 순서(order)를 생성하는 단계; 및
    상기 주소에 기초하여 상기 제1 메모리로부터 상기 다항식의 계수를 읽고, 상기 제2 메모리로부터 상기 트위들 팩터를 읽기 위한 뱅크 주소 및 순서를 생성하는 단계
    를 더 포함하는 동형 암호 연산 방법.
  20. 제18항에 있어서,
    상기 NTT 연산을 수행하는 단계는,
    상기 주소를 이용하여 각각의 이터레이션 동안 상기 제1 메모리로부터 상기 다항식의 차수에 기초하여 결정된 입력 개수를 불러오는 단계; 및
    NTT 연산 결과를 상기 주소에 저장하는 단계
    를 포함하는 동형 암호 연산 방법.
KR1020210165593A 2021-11-26 2021-11-26 반복 배열 ntt를 이용한 동형 암호 연산 장치 및 방법 KR20230078131A (ko)

Priority Applications (2)

Application Number Priority Date Filing Date Title
KR1020210165593A KR20230078131A (ko) 2021-11-26 2021-11-26 반복 배열 ntt를 이용한 동형 암호 연산 장치 및 방법
US17/961,828 US20230171084A1 (en) 2021-11-26 2022-10-07 Appratus and method with homomorphic encryption

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020210165593A KR20230078131A (ko) 2021-11-26 2021-11-26 반복 배열 ntt를 이용한 동형 암호 연산 장치 및 방법

Publications (1)

Publication Number Publication Date
KR20230078131A true KR20230078131A (ko) 2023-06-02

Family

ID=86499510

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210165593A KR20230078131A (ko) 2021-11-26 2021-11-26 반복 배열 ntt를 이용한 동형 암호 연산 장치 및 방법

Country Status (2)

Country Link
US (1) US20230171084A1 (ko)
KR (1) KR20230078131A (ko)

Also Published As

Publication number Publication date
US20230171084A1 (en) 2023-06-01

Similar Documents

Publication Publication Date Title
Fritzmann et al. RISQ-V: Tightly coupled RISC-V accelerators for post-quantum cryptography
US7836116B1 (en) Fast fourier transforms and related transforms using cooperative thread arrays
US7640284B1 (en) Bit reversal methods for a parallel processor
KR101202445B1 (ko) 프로세서
US20190171448A1 (en) Stream processor with low power parallel matrix multiply pipeline
EP3903300A1 (en) Configurable lattice cryptography processor for the quantum-secure internet of things and related techniques
Nejatollahi et al. Cryptopim: In-memory acceleration for lattice-based cryptographic hardware
US8880575B2 (en) Fast fourier transform using a small capacity memory
JP2008513903A (ja) シャッフル演算のためのマイクロプロセッサデバイス及び方法
Bisheh Niasar et al. Efficient hardware implementations for elliptic curve cryptography over Curve448
US9223752B2 (en) Digital signal processor with one or more non-linear functions using factorized polynomial interpolation
JP7324754B2 (ja) ベクトル・キャリー付き加算命令
Maza et al. Fast polynomial multiplication on a GPU
KR20230078131A (ko) 반복 배열 ntt를 이용한 동형 암호 연산 장치 및 방법
Hilewitz et al. Bit matrix multiplication in commodity processors
Zheng Encrypted cloud using GPUs
JP2020527797A (ja) データ処理装置におけるベクトル・インタリーブ
JP2020527795A (ja) レジスタベースの複素数処理
Li et al. An area-efficient large integer NTT-multiplier using discrete twiddle factor approach
Malashri et al. Low power and memory efficient FFT architecture using modified CORDIC algorithm
US9582473B1 (en) Instruction set to enable efficient implementation of fixed point fast fourier transform (FFT) algorithms
Du Pont et al. Hardware Acceleration of the Prime-Factor and Rader NTT for BGV Fully Homomorphic Encryption
Tasnim et al. MAGIC-DHT: Fast in-memory computing for Discrete Hadamard Transform
US20100138463A1 (en) Digital Signal Processor Having Instruction Set With One Or More Non-Linear Functions Using Reduced Look-Up Table
JP7140201B2 (ja) 演算処理装置及び演算処理装置の制御方法