安全参数¶
来源:
密码学引论 / digital_signature/安全参数.md
\[
1^\lambda
\]
不是指数运算,而是“长度为 \lambda 的全 1 字符串”。
和二进制编码对比一下更清楚:
| 数字 | 一元编码 | 二进制编码 |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 11 | 10 |
| 3 | 111 | 11 |
| 4 | 1111 | 100 |
| 8 | 11111111 | 1000 |
| 128 | 128 个 1 | 10000000 |
为什么密码学里要用一元编码?
因为密码学理论里经常说:
算法运行时间是关于安全参数\(\lambda\) 的多项式时间。
如果输入是二进制的 128,那么输入长度只有 8 位左右。 但是如果输入是:
\[
1^{128}
\]
那么输入长度就是 128。
这样写可以保证算法的运行时间是关于 \lambda 多项式,而不是关于 \log \lambda 多项式。
所以:
\[
KeyGen(1^\lambda)
\]
可以理解成:
给密钥生成算法一个长度为 \(\lambda\) 的字符串,用它来表示安全参数是 \(\lambda\)