数论基础
Carmichael函数:n∈Z+,∀a∈Z+n,若能满足ax≡1(modn)的最小x,记为λ(n),称为Carmichael函数
定理:n∈Z+,设n=n1⋅n2,且(n1,n2)=1,则λ(n)=[λ(n1),λ(n2)]
证明.
∀a∈Z+n,aλ(n)≡1modn
∵n1∣n
∴aλ(n)=1modn1
∴λ(n1)∣λ(n)
同理,λ(n2)∣λ(n)
∴[λ(n1),λ(n2)]∣λ(n)
设Z+n1={ai|0<i≤n1},Z+n2={bj|0<j≤n2}
则Z+n={n2ai+n1bj}
(n2ai+n1bj)λ(n1)≡nλ(n1)2≡1modn1
则(n2ai+n1bj)[λ(n1),λ(n2)]≡1modn1
同理,(n2ai+n1bj)[λ(n1),λ(n2)]≡1modn2
∵[n1,n2]=n
∴∀a∈Z+n,a[λ(n1),λ(n2)]≡1modn
∴λ(n)∣[λ(n1),λ(n2)]
∴[λ(n1),λ(n2)]=λ(n)
Carmichael函数的取值:
- 当原根存在时,显然λ(n)=φ(n),即当n=2,4,pα,2pα
- 如果n = pa11⋅pa22⋯pass,根据上面的定理,则λ(n) = [λ(pa11),λ(pa22),⋯,λ(pass)]
- 如果n = 2α,α≥3,则λ(n) = φ(n)2
定理:设n∈Z+,w∈Z+n,则wnλ(n)≡1modn2
证明.
wλ(n)≡1modn
∴∃k∈Z+N,wλ(n)=1+kn
(wλ(n))n=(1+kn)n=1+Σn1Cin(kn)i=1+kn2+Σn2Cin(kn)i≡1modn2
Paillier加密方案
Paillier加密方案是欧洲通用的一种同态的公钥加密方案,其构造如下:
- Gen:取两个大素数p,q,令n=pq,λ=[p-1,q-1],概率均匀的选择一个g∈Z+n2,并且满足 n | ord(g),则(n,g)为公钥,(p,q,λ)为私钥
- Enc:对消息m∈Z+n,概率均匀的选择一个r∈Z+n,则密文 c = rngmmodn2
- Dec:解密m' = L(cλmodn2)L(gλmodn2),其中L(x)=x−1n
正确性验证:
因为gλ≡1modn
不妨令gλ=1+kn,k∈Z+
m' = cλ−1ngλ−1n=(rngm)λ−1n1+kn−1n
≡(gλ)m−1nk≡(1+kn)m−1nk≡1+mkn+Σm2Cim(kn)i−1nk
≡kmk≡mmodn2
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)