Skip to content

Commit

Permalink
Fix errors (#52)
Browse files Browse the repository at this point in the history
* Add reference of Notations.md

* Translate Documents
  • Loading branch information
yijun-lee authored Aug 3, 2024
1 parent 8d5abab commit dc82ca3
Show file tree
Hide file tree
Showing 32 changed files with 988 additions and 1 deletion.
5 changes: 4 additions & 1 deletion content/Notations.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,7 @@

- **$J(w, n)$**: The Jacobi symbol for $w$ modulo $n$, defined only for positive odd $n$, and can take values of $-1, 0, 1$.
- **$J_n$**: The set of elements in $\mathbb{Z}_n^*$ with a Jacobi symbol of 1.
- **$QR_n$**: The set of quadratic residues modulo $n$, elements that have a square root, defined as $QR_n = \{ e \in \mathbb{Z}_n : \exists r, r^2 \equiv e \mod n \}$.
- **$QR_n$**: The set of quadratic residues modulo $n$, elements that have a square root, defined as $QR_n = \{ e \in \mathbb{Z}_n : \exists r, r^2 \equiv e \mod n \}$.

### Reference
https://www.zkdocs.com/docs/zkdocs/notation/
4 changes: 4 additions & 0 deletions content/i18n/ko/Blockchain/Blockchain.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
>[!Info]
> [[Blockchain]] 섹션에서는 블록체인 내에서 암호학의 응용을 탐구하며, 사용자 프라이버시를 보호하기 위해 고안된 고급 암호화 방법에 중점을 둡니다. 여기에는 fhEVM, 영지식 증명, 안전한 다자간 연산, 동형 암호화를 포함한 다양한 암호화 응용이 포함됩니다.
- [[fhEVM]]
56 changes: 56 additions & 0 deletions content/i18n/ko/Contribution Guide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
🎉 Cryptography SecondBrain에 기여해주셔서 감사합니다! 🎉

자유롭게 참여하세요. 워크플로우와 기준에 대해 배우려면 다음 섹션을 읽어보세요. 문서를 작성하거나 오류를 보고하거나 질문하고 싶다면, 모든 형태의 기여를 환영합니다.

우리 커뮤니티의 모든 구성원은 행동 강령을 따라야 합니다. 모든 상호작용에서 모두에게 환영받고 친근한 공간을 만들기 위해 노력합시다.

이 문서를 읽어주셔서 정말 기쁩니다! 자원봉사 개발자들은 우리가 목표에 빠르게 도달하고 프로젝트를 실현하는 데 큰 도움이 될 수 있습니다.

## 이슈

우리 프로젝트에 기여하는 가장 좋은 방법은 새로운 이슈를 열거나 기존 이슈를 해결하는 것입니다.

[GitHub 저장소를 방문하여 이슈를 열거나 기존 이슈를 확인하세요.](https://github.com/decipherhub/Cryptography/issues)

## 풀 리퀘스트

기능 추가나 문서화를 하고 싶다면 풀 리퀘스트가 좋은 방법입니다. 다음은 간단한 가이드입니다:

1. 레포지토리를 포크하세요.
2. 변경 사항을 커밋하세요.
3. 포크에 푸시하고 `main` 브랜치에 풀 리퀘스트를 제출하세요. 변경한 이유에 대한 설명을 제공해 주세요. 새 문서를 추가하려면 참고 자료를 포함해야 합니다.

[GitHub 저장소에서 풀 리퀘스트를 제출하세요.](https://github.com/decipherhub/Cryptography/pulls)

## Obsidian 사용하기

Obsidian을 사용하여 이 프로젝트에서 작업하는 방법은 다음과 같습니다:

1. 레포지토리를 클론하세요:

```bash
git clone https://github.com/decipherhub/Cryptography.git
```

**Cryptography** 폴더의 위치를 기록해 두세요.

2. **Obsidian**을 엽니다.

3. 파일 > Vault 열기를 클릭하세요.

4. **Open folder as vault** 버튼을 클릭하세요.

5. 1단계에서 클론한 Cryptography 폴더로 이동하여, 그 안에 있는 content 폴더를 선택하고 열기를 클릭하세요.

6. Obsidian에서 변경 및 추가 작업을 수행하세요.

7. 작업이 완료되면 터미널로 전환하여 Cryptography 폴더로 이동하고 변경 사항을 커밋하세요:

```bash
cd path/to/Cryptography
git add .
git commit -m "Your commit message"
git push origin your-branch-name
```

변경 사항을 푸시한 후에는 풀 리퀘스트를 열어 주세요.
14 changes: 14 additions & 0 deletions content/i18n/ko/How to get started.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Cryptography SecondBrain에 오신 것을 환영합니다! 이 종합적인 위키는 기본 대수학부터 고급 프라이버시 강화 기술(Privacy Enhancing Technologies, PET)에 이르기까지 다양한 암호학 주제를 학습할 수 있도록 설계되었습니다. 암호학적 개념들이 어떻게 연결되어 있는지를 알기 위해 ==디펜던시 그래프==를 먼저 살펴보세요.

#### 예시 - 슈노르 서명 (Schnorr Signature)
예를 들어, 학습자가 슈노르 서명(Schnorr Signature)에 대해 공부하고 싶다면 다음 단계를 따를 수 있습니다:

1. [[슈노르 서명(Schnorr Signature)]] 문서를 간단히 읽어보세요.
2. 의존성 그래프에서 [[순환 부분군(Cyclic Subgroup)]][[군(Group)]]을 참조하여 슈노르 서명의 기초가 되는 대수적 지식을 학습하세요.
- 그래프의 노드를 클릭하여 관련 문서로 직접 이동할 수 있습니다.
3. 슈노르 서명의 설계를 자세히 공부하세요.
4. 슈노르 서명의 사용 사례를 이해하려면 [[디지털 서명(Digital Signature)]]을 공부하세요.
- 더 깊이 있는 학습을 위해 공용 키 암호화, 해싱, 기타 디지털 서명 알고리즘을 의존성 그래프에서 탐색하세요.
5. 슈노르 서명의 보안 수준을 평가하려면 의존성 그래프에서 [[이산 로그 문제(Discrete Logarithm Problem)]]를 공부하세요.

문제가 발생하거나 질문이 있는 경우, [email protected]으로 이메일을 보내주세요.
67 changes: 67 additions & 0 deletions content/i18n/ko/Notations.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@

> [!Info]
> [[Notations]] 섹션에서는 고급 수학 및 암호학 이론을 이해하는 데 필수적인 주요 수학 개념과 표기법을 제공합니다. 다양한 집합, 연산 및 특성의 정의를 포함하여 복잡한 알고리즘과 수학적 증명을 탐구하기 위한 기초를 형성합니다.
## 집합과 수 체계

### 주요 집합

- **$\mathbb{Z}$**: 정수 집합으로, $\{ \ldots, -2, -1, 0, 1, 2, \ldots \}$로 표시됩니다.
- **$\mathbb{N}$**: 0을 포함한 자연수 집합, $\{ 0, 1, 2, \ldots \}$.
- **$[b]$**: 유한 정수 집합, $\{ 0, 1, \ldots, b-1 \}$.
- **$\mathbb{R}$**: 모든 유리수 및 무리수를 포함하는 실수 집합. 실수는 연속적인 수직선의 모든 점에 해당합니다.

### 모듈러 산술 및 관련 집합

- **$\mathbb{Z}_n$**: 모듈러 $n$의 정수 집합으로, 동등 클래스 $\{ 0, 1, \ldots, n-1 \}$로 구성됩니다.
- **$\mathbb{Z}_n^*$**: 모듈러 $n$의 정수의 곱셈군으로, $\gcd(e, n) = 1$을 만족하는 요소 $e$로 구성됩니다. $n$이 소수일 때, $\mathbb{Z}_n^* = \{ 1, \ldots, n-1 \}$.

### 유한체 및 오일러의 토티언트 함수

- **$\mathbb{F}_p$**: 차수 $p$의 유한체. $p$가 소수일 때, 이는 $\mathbb{Z}_p$인 정수 모듈러 $p$에 해당합니다. 소수 거듭제곱 $q^k$의 경우, 이는 갈루아 체에 해당합니다.
- **$\phi(n)$**: 오일러의 토티언트 함수로, $n$과 서로 소인 $\{ 1, \ldots, n \}$의 정수 수를 셉니다.

### 집합의 기수

- **$|S|$**: 집합 $S$의 순서 또는 기수로, 집합 내 요소의 수입니다. 예를 들어, $|\mathbb{Z}_n^*| = \phi(n)$. $n$이 소수인 경우, $|\mathbb{Z}_n^*| = n-1$.

## 연산의 특성

### 1. 역원

- **정의**: 주어진 요소 $a$에 대해, 특정 연산에서 $a$와 결합될 때 항등원을 생성하는 역원.
- **예시**: 덧셈의 경우, 역원은 음수입니다. 곱셈의 경우, 역원은 역수입니다. 실수 집합의 경우, $a$의 덧셈 역원은 $-a$이고 곱셈 역원은 $1/a$입니다($a \neq 0$을 가정).

### 2. 항등원

- **정의**: 특정 연산에서 집합의 모든 요소와 결합될 때 요소를 변경하지 않는 항등원.
- **예시**: 덧셈의 항등원은 0이고, 곱셈의 항등원은 1입니다. 따라서 $a + 0 = a$이고 $a \times 1 = a$입니다.

### 3. 결합법칙

- **정의**: 연산에서 요소를 그룹화하는 방식이 결과에 영향을 미치지 않는 특성.
- **수식**: $(a \star b) \star c = a \star (b \star c)$.
- **예시**: 덧셈과 곱셈 모두 결합법칙이 적용됩니다. 예를 들어, $(a + b) + c = a + (b + c)$ 및 $(a \times b) \times c = a \times (b \times c)$.

### 4. 교환법칙

- **정의**: 연산에서 요소의 순서가 결과에 영향을 미치지 않는 특성.
- **수식**: $a \star b = b \star a$.
- **예시**: 덧셈과 곱셈 모두 교환법칙이 적용됩니다. 예를 들어, $a + b = b + a$ 및 $a \times b = b \times a$.

### 5. 분배법칙

- **정의**: 하나의 연산이 표현식 내의 다른 연산에 대해 분배되는 방법을 설명.
- **수식**: $a \times (b + c) = (a \times b) + (a \times c)$.
- **예시**: 곱셈은 덧셈에 대해 분배적입니다. 예를 들어, $2 \times (3 + 4) = (2 \times 3) + (2 \times 4)$.

## 정수론 개념

### 야코비 기호 및 이차 잉여

- **$J(w, n)$**: $n$ 모듈러 $w$에 대한 야코비 기호로, 양의 홀수 $n$에 대해서만 정의되며 $-1, 0, 1$의 값을 가질 수 있습니다.
- **$J_n$**: 야코비 기호가 1인 $\mathbb{Z}_n^*$의 요소 집합.
- **$QR_n$**: $n$ 모듈러의 이차 잉여 집합으로, 제곱근이 있는 요소로 정의되며, $QR_n = \{ e \in \mathbb{Z}_n : \exists r, r^2 \equiv e \mod n \}$로 표현됩니다.

### 참조
https://www.zkdocs.com/docs/zkdocs/notation/
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
## BFV (Brakerski-Fan-Vercauteren) 스킴

BFV 스킴은 [[BGV]]와 유사하지만, [[Learning with Errors(LWE)]] 문제에 기반하고 있습니다. Fan과 Vercauteren이 BGV 스킴을 개선하여 제안한 것입니다.

### 주요 구성 요소

1. **비밀키 생성 (Secret Key Generation)**: 비밀키 $s$는 다항식 링 $\mathbb{Z}_q[X]/(X^N + 1)$에서 선택됩니다.
2. **공개키 생성 (Public Key Generation)**: 공개키는 $(a, b = -a \cdot s + e)$로 구성됩니다.
3. **암호화 (Encryption)**: 메시지 $m \in \mathbb{Z}_t[X]/(X^N + 1)$을 암호화하기 위해 랜덤 다항식 $r$을 선택하고, $c = (a \cdot r + e_1, b \cdot r + e_2 + \Delta \cdot m)$로 암호문을 생성합니다.
4. **복호화 (Decryption)**: 암호문 $c$를 복호화하여 $m' = \left\lceil \frac{c_2 + s \cdot c_1}{\Delta} \right\rfloor \pmod{t}$를 계산합니다. 여기서 $\Delta$는 스케일링 인자입니다.

### 동형 연산

BFV 스킴도 덧셈과 곱셈에 대해 동형성을 가집니다.

- **동형 덧셈**: $c = c' + c'' = (c'_1 + c''_1, c'_2 + c''_2)$
- **동형 곱셈**: $c = c' \cdot c''$
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
## BGV (Brakerski-Gentry-Vaikuntanathan) 스킴

BGV 스킴은 브라커스키, 젠트리, 바이쿤타나탄이 개발한 스킴으로, [[Ring Learning with Errors(RLWE)]] 문제에 기반한 동형암호 스킴입니다.

### 주요 구성 요소

1. **비밀키 생성 (Secret Key Generation)**: 비밀키 $s$는 다항식 링 $\mathbb{Z}_q[X]/(X^N + 1)$에서 선택됩니다.
2. **공개키 생성 (Public Key Generation)**: 공개키는 비밀키를 사용하여 생성되며, 두 개의 다항식 $(a, b = -a \cdot s + e)$로 구성됩니다. 여기서 $a$는 무작위로 선택된 다항식이고, $e$는 작은 잡음(오차)입니다.
3. **암호화 (Encryption)**: 메시지 $m \in \mathbb{Z}_t[X]/(X^N + 1)$를 암호화하기 위해 랜덤 다항식 $r$을 선택하고, 암호문 $c = (c_1, c_2) = (a \cdot r + e_1, b \cdot r + e_2 + m)$을 생성합니다.
4. **복호화 (Decryption)**: 암호문 $c$를 복호화하기 위해 $m' = c_2 + s \cdot c_1 \pmod{q}$을 계산합니다. 여기서 $m' \approx m$이 됩니다.

### 동형 연산

BGV 스킴은 덧셈과 곱셈 모두에 대해 동형성을 가집니다.

- **동형 덧셈**: 두 암호문 $c' = (c'_1, c'_2)$와 $c'' = (c''_1, c''_2)$에 대해 $c = c' + c'' = (c'_1 + c''_1, c'_2 + c''_2)$로 수행되며, 이는 $m = m' + m''$에 대응합니다.
- **동형 곱셈**: 두 암호문 $c' = (c'_1, c'_2)$와 $c'' = (c''_1, c''_2)$에 대해 $c = c' \cdot c'' = (c'_1 \cdot c''_1, c'_2 \cdot c''_2)$로 수행되며, 이는 $m = m' \cdot m''$에 대응합니다.
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Bootstrapping in Homomorphic Encryption
**Bootstrapping**은 암호화된 상태에서 시크릿 키를 사용하여 노이즈가 많은 암호문을 노이즈가 적은 암호문으로 변환하는 과정입니다. 이를 통해 암호화된 데이터를 동형적으로 복호화하여 노이즈를 줄이고, 추가적인 동형 연산을 가능하게 합니다. 부트스트래핑은 많은 계산 자원이 필요하며, 동형 암호화(FHE) 기술의 핵심적인 요소입니다.

## 문제: Modulus 감소
FHE에서는 각 동형 곱셈이 Modulus를 소모하며, Modulus는 한정된 자원입니다.
Modulus가 소진되면 더 이상의 곱셈이 불가능해집니다.
부트스트래핑은 Modulus를 "리프팅"하여 이 문제를 해결합니다.

## 부트스트래핑의 정의
$ct = (b, a) \in R_q^2$가 평문 $m \in R$을 암호화한 CKKS 암호문이라고 할 때, 부트스트래핑 $BTS : R_q^2 \to R_Q^2$는 암호문의 Modulus를 증가시키면서 기본 평문을 대략적으로 유지합니다.
즉, $BTS(ct) \in R_Q^2$는 평문 $pt' \approx pt$를 암호화합니다.

## 부트스트래핑의 단계
1. **Slots-to-Coefficients (StC):**
- 암호문 슬롯을 다항식 계수로 변환합니다.
- 출력: $ct' = Enc(\Delta \cdot z(X)) \in R_{q0}^2$.

2. **Modulus Raising (ModRaise):**
- 기본 Modulus $q0$의 작은 배수를 추가하여 Modulus를 증가시킵니다.
- 출력: $ct'' = Enc(\Delta \cdot z(X) + q0 \cdot I(X))$ 여기서 $I(X) \in R$은 작은 값입니다.

3. **Coefficients-to-Slots (CtS):**
- 다항식 계수를 다시 슬롯으로 변환합니다.
- 출력: $ct''' = Enc \circ Ecd(z + (q0/\Delta) \cdot I)$.

4. **Homomorphic Modular Reduction (EvalMod):**
- 추가된 배수 $I$를 제거하여 원하는 결과를 얻습니다.
- 출력: $Enc \circ Ecd(z) \in R_Q^2$

## Modulus Raising
$ct = (b, a) \in R_q^2$가 평문 $pt \in R$을 암호화한다고 가정합니다.
$[b]_q$와 $[a]_q$를 $b$와 $a$의 대표값으로 선택합니다.
그러면 다음과 같은 관계가 성립합니다:
- $ [b]_q + [a]_q \cdot s \equiv_q pt $
- 따라서, $ [b]_q + [a]_q \cdot s = pt + q \cdot I $
- $I \in R$이며 $\|I\|_\infty \leq (h + 1)/2$입니다.
Modulus Raising을 통해 $ct$는 $pt + q \cdot I$를 암호화한 요소로 간주됩니다.

## Homomorphic Discrete Fourier Transform (DFT)
DFT 매트릭스 $U$는 다음과 같이 분해할 수 있습니다:
- $ U = D_{\log(N)-1} D_{\log(N)-2} \cdots D_1 P $

여기서 $D_i$는 버터플라이 매트릭스이며, $P$는 순열 매트릭스입니다.
효율성을 위해 정확한 DFT 대신 $P$를 제외한 비트 반전 DFT $U P^{-1}$를 사용합니다.

## Approximate Modular Reduction
모듈러 감소 함수를 근사하기 위해 다항식을 사용합니다.
일반적인 접근 방식은 삼각 함수와 다항식 근사 알고리즘을 사용하는 것입니다. 예를 들어:
- $ \text{Modular Reduction by 1 and } \sin(2\pi x)/2\pi $
이 함수들은 정수 포인트 근처에서 유사하게 작동하여 Modular 1과 사인 함수 사이의 간극을 줄이는 데 도움이 됩니다.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
## CGGI (Cheon-Gentry-Goldwasser-Ishai) 스킴

CGGI 스킴은 Cheon, Gentry, Goldwasser, Ishai가 제안한 스킴으로, [[Bootstrapping]]을 통해 효율성을 높인 동형암호 스킴입니다.

### 주요 구성 요소

1. **비밀키 생성 (Secret Key Generation)**: 비밀키는 LWE 기반 문제에서 생성됩니다.
2. **공개키 생성 (Public Key Generation)**: 공개키는 비밀키와 LWE 샘플로 구성됩니다.
3. **암호화 (Encryption)**: 메시지를 암호화하여 LWE 암호문을 생성합니다.
4. **복호화 (Decryption)**: 암호문을 복호화하여 원래 메시지를 복원합니다.

### 동형 연산

CGGI 스킴은 효율적인 부트스트래핑을 통해 복잡한 연산을 지원합니다.

- **동형 덧셈**: LWE 샘플의 덧셈으로 수행됩니다.
- **동형 곱셈**: LWE 샘플의 곱셈으로 수행되며, 부트스트래핑을 통해 효율성을 유지합니다.
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# CKKS 암호화 기법
## 정의
CKKS (Cheon-Kim-Kim-Song)는 복잡한 실수 계산을 효율적으로 수행할 수 있도록 설계된 완전 동형 암호화(FHE) 기법입니다. 이는 고정밀 실수 연산을 지원하고, 다수의 데이터 요소를 한 번에 처리할 수 있는 병렬 연산 기능(SIMD)을 제공합니다. CKKS는 기계 학습과 통계학에서 주로 사용되며, 이들 분야에서의 많은 연산이 근사 연산이기 때문에 다른 암호화 방식보다 더 유리합니다.

## CKKS의 주요 특징
### 인코딩과 디코딩
- CKKS에서는 메시지를 암호화하기 전에 메시지를 복소수 벡터 형태로 인코딩합니다. 이 인코딩 과정은 메시지를 복소수 공간($CN/2$)에서 다항식 공간($R[X]/(X^N+1)$)으로 변환합니다. 인코딩 함수는 $Ecd(z) = \lfloor \Delta \cdot iDFT(z) \rceil$이며, 디코딩 함수는 $Dcd(p(X)) = \frac{1}{\Delta} \cdot DFT(p(X))$입니다. 여기서 $\Delta$는 스케일링 팩터입니다.
- 인코딩 과정 중에는 rounding errors가 발생할 수 있으며, 이를 줄이기 위해 적절한 $\Delta$ 값을 선택합니다.

### 암호화와 복호화
- CKKS의 암호화는 [[Ring Learning with Errors(RLWE)]] 문제를 기반으로 합니다. 메시지를 다항식 공간에서 암호화하여 사이퍼텍스트를 생성합니다. 암호화된 사이퍼텍스트는 $(b, a)$ 형태로 표현되며, 여기서 $b$와 $a$는 각각 랜덤 다항식과 에러를 포함합니다.
- 복호화는 이 사이퍼텍스트를 사용하여 원래 메시지를 복원하는 과정입니다. 복호화 함수는 $[b + a \cdot s]_{q0}$로 정의되며, 여기서 $s$는 비밀 키입니다.

### 기본 연산
- CKKS는 덧셈과 곱셈과 같은 기본적인 동형 연산을 지원합니다. 두 사이퍼텍스트 $(b1, a1)$와 $(b2, a2)$의 덧셈은 $(b1 + b2, a1 + a2)$로 정의되며, 곱셈은 $(b1b2, a1b2 + a2b1, a1a2)$로 정의됩니다. 이러한 연산은 암호화된 상태에서 직접 수행되며, 결과는 여전히 암호화된 상태로 유지됩니다.

### Key Switching과 Relinearization
- Key Switching은 암호화된 메시지를 다른 비밀 키로 다시 암호화하는 과정입니다. 이를 통해 비밀 키의 변경 없이도 암호화된 데이터를 안전하게 공유할 수 있습니다.
- Relinearization은 사이퍼텍스트의 길이를 줄이는 과정으로, 이는 연산 중 키의 크기 증가 문제를 해결하는 데 사용됩니다. 이를 통해 연산 효율성을 유지하면서 동형 연산을 계속 수행할 수 있습니다.

### Rescaling
- Rescaling은 곱셈 연산 후 증가한 스케일링 팩터를 줄이는 과정입니다. 이는 $\Delta^2$로 증가한 스케일링 팩터를 다시 $\Delta$ 수준으로 낮추어 계산 정확도를 유지합니다.

## 응용 분야
- **기계 학습:** CKKS는 기계 학습에서 사용되는 다수의 연산이 근사 연산이라는 점에서 매우 적합합니다. 다수의 데이터 포인트를 병렬로 처리할 수 있어 효율성을 극대화할 수 있습니다.
- **통계 분석:** 통계학에서도 대규모 데이터셋에 대한 복잡한 실수 연산을 안전하게 수행할 수 있어 유용합니다. CKKS는 이러한 연산을 암호화된 상태에서 수행함으로써 데이터 프라이버시를 보장합니다.
Loading

0 comments on commit dc82ca3

Please sign in to comment.