第一章:密钥提取预备知识
各位同学好,我是老张。在智能卡安全这行摸爬滚打了十几年,今天咱们来聊聊JCOP卡片密钥提取的前置知识。
说实话,密钥提取这事儿,技术门槛不低。但只要你把基础打牢了,后面就顺了。这一章,我带你过一遍必须掌握的核心概念。
1.1 对称加密与非对称加密
先搞清楚这两个东西的区别。对称加密,说白了就是加密和解密用同一把钥匙。你想想看,就像你家大门,用一把钥匙锁上,也用同一把钥匙打开。简单、快,但问题也明显——钥匙怎么安全地交给对方?
非对称加密就不一样了。它有两把钥匙:公钥和私钥。公钥可以公开,私钥自己藏着。别人用你的公钥加密数据,只有你能用私钥解开。嗯,这里要注意:非对称加密慢,非常慢。所以实际应用中,我们通常用它来传输对称密钥。
核心区别:
- 对称加密:速度快,适合大数据量加密
- 非对称加密:安全性高,适合密钥交换和数字签名
我在项目中遇到过一件事:有个同事图省事,直接用RSA加密整张卡片的数据,结果性能惨不忍睹。后来改成用RSA加密AES密钥,再用AES加密数据,问题就解决了。
1.2 DES/3DES/AES算法原理
这三个算法,是智能卡领域的常客。我一个个说。
DES
DES是老祖宗了,56位密钥。现在基本没人用它,因为暴力破解太容易。我记得十年前做的一个项目,客户还要求用DES,我劝了半天才改成3DES。
3DES
3DES就是DES的三次叠加。密钥长度变成112位或168位。安全性比DES高不少,但速度慢。嗯,这里要注意:3DES现在也被认为不够安全了,NIST已经把它标记为逐步淘汰。
AES
AES是现在的标准。密钥长度支持128、192、256位。速度快,安全性高。我个人习惯,新项目一律用AES-128或AES-256。
| 算法 | 密钥长度 | 分组大小 | 安全性 |
|---|---|---|---|
| DES | 56位 | 64位 | 已淘汰 |
| 3DES | 112/168位 | 64位 | 逐步淘汰 |
| AES | 128/192/256位 | 128位 | 安全 |
避坑指南:我曾经在JCOP卡片上遇到过3DES的时序攻击问题。因为3DES计算量大,功耗分析时很容易被抓住特征。后来改用AES,配合掩码技术,才解决了这个问题。
1.3 RSA/ECC算法原理
非对称加密里,RSA和ECC是两大主流。
RSA
RSA基于大整数分解难题。密钥越长越安全,但计算也越慢。2048位的RSA是目前推荐的最低标准。我建议你记住:RSA适合做签名,不太适合做加密,因为太慢了。
ECC
ECC基于椭圆曲线离散对数问题。同样的安全级别,ECC的密钥长度比RSA短得多。比如256位的ECC,安全性相当于3072位的RSA。这对智能卡这种资源受限的设备来说,太重要了。
关键对比:
- RSA 2048位 vs ECC 256位:安全性相当,但ECC速度快10倍以上
- RSA适合签名,ECC适合密钥交换
你想想看,智能卡就那么点存储空间和计算能力。用ECC能省下不少资源。我在做JCOP卡片项目时,基本都选ECC。
1.4 密钥派生函数(KDF)
KDF这东西,很多人容易忽略。但它其实特别重要。
KDF的作用是什么?从一个主密钥,派生出多个子密钥。比如你有一个根密钥,需要生成加密密钥、MAC密钥、会话密钥等。这时候KDF就派上用场了。
常见的KDF有:
- HKDF:基于HMAC,安全性高
- PBKDF2:带盐值,抗暴力破解
- NIST SP 800-108:专门为智能卡设计的
警告:千万不要直接用主密钥加密数据!我曾经见过一个项目,工程师图省事,直接用主密钥当会话密钥用。结果密钥被提取后,整个系统都废了。正确的做法是用KDF派生会话密钥,用完就丢。
在JCOP卡片中,KDF通常用于:
- 卡片个人化时的密钥派生
- 会话密钥的生成
- 安全通道的建立
嗯,这里要注意:KDF的输入参数一定要包含足够的熵。比如卡片序列号、计数器、应用ID等。否则派生出来的密钥可能不够随机。
知识体系结构图
下面这张图,我帮你梳理了本章的知识脉络。你可以把它当作一个思维导图来看。
这张图把本章的知识点串起来了。你仔细看看,对称加密和非对称加密是两大支柱,KDF则是连接它们的桥梁。在实际的JCOP卡片中,这三者缺一不可。
我的建议:学完这一章,你最好能自己画一遍这个图。画着画着,你就发现哪些地方还没搞懂。我当年就是这么学的。
好了,这一章的内容就到这儿。记住:基础不牢,地动山摇。把这些概念吃透了,后面讲密钥提取的时候,你才能跟得上。