---
# System prepended metadata

title: 中國餘式定理 CRT
tags: [crypto]

---

---
title: 中國餘式定理 CRT
tags: crypto
lang: zh_tw
---

* [筆記總覽](https://hackmd.io/@LJP/rkerFdnqS)

[TOC]

# 中國餘式定理 CRT
## 簡介
Chinese Remainder Theorem (CRT)

若 $N = p \times q$ 其中 $p, q$ 互質
所有的 $a \in Z_N$ 可以 one-to-one mapping 到一張圖表
mapping 到的座標為 $(a\ mod\ p,\ a\ mod\ q)$

直接看一個例子，$N = 15 = 3 \times 5$
圖表的 y 軸為 $a\ mod\ 3$ ; x 軸為 $a\ mod\ 5$

| y軸\x軸 | 0 | 1 | 2 | 3 | 4 |
| -------- | -------- | -------- | -- | -- | -- |
| 0     | 0     | 6     | 12 | 3 | 9
| 1     | 10     | 1     | 7 | 13 | 4
| 2     | 5     | 11     | 2 | 8 | 14

給 $a$ 能很好得出座標
但給座標要如何反推 $a$ ?

舉個例子，若已知 $(a\ mod\ 7,\ a\ mod\ 5)$ 系統，求在 $(4,\ 3)$ 座標上的數字 $x$

首先知道 $x \in Z_{7 \times 5}$

根據 $x \equiv 4\ (mod\ 7)$ 可得知 $x = 7 \times u + 4$
再根據 $x \equiv 3\ (mod\ 5)$
替換為
$7u + 4 \equiv 3\ (mod\ 5)$
$7u \equiv 3-4 \equiv 3-4+5 \equiv 4\ (mod\ 5)$
$2u \equiv 4\ (mod\ 5)$
$u \equiv 2\ (mod\ 5)$

求得 $u = 2,\ x = 7 \times 2 + 4 = 18$

## 擴展
剛剛的方式僅能簡單處理由兩個質數組成的 $N$
現在要擴展到

**由 $K$ 個不同的質數$\{P_1, P_2, ..., P_K\}$組成的 $N$，求快速從座標系統 $(a\ mod\ P_1, a\ mod\ P_2, ..., a\ mod\ P_K)$推回 x 的解法**

$$
x \equiv \sum_{i = 1}^Ka_i \times M_i \times y_i\ (mod\ N)
$$

- $a_i$: 第 i 軸上的係數
- $M_i = \frac{P}{P_i}$ , 其中 $P = \prod_{j = 1}^KP_j$
- $y_i \times M_i \equiv 1\ (mod\ P_i)$

### 例子
以上面舉過的例子
> 若已知 $(a\ mod\ 7,\ a\ mod\ 5)$ 系統，求在 $(4,\ 3)$ 座標上的數字 $x$
> 

| 軸 | $a_i$ | $M_i$ | $y_i$ |
| -- | -------- | -------- | -------- |
| $mod\ 7$ | 4     | 5     | 3
| $mod\ 5$ | 3     | 7     | 3 

$x \equiv a_1 \times M_1 \times y_1 + a_2 \times M_2 \times y_2\ (mod\ 35)$
$x \equiv 60 + 63 \equiv 123\ (mod\ 35)$
$x \equiv 18$