跳转至

安全参数

来源:密码学引论 / 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\)