身份验证的几种手段
传统的身份验证通常出现在一些文档的签名上。 这些文档由一些手写签名或特殊技术处理的印花,水印或其他相似的技术来保证其合法性。
现今的身份验证大多用于隐私和机密信息的保护方面。 在大部分情况下, 这种技术通常与一些硬件相结合使用, 比如Smartcard, WIBU-KEY或CodeMeter。如今可通过多种方式来实现身份验证。 一种方式是基于共享密钥方式, 即用户和验证者使用相同的密钥信息来验证内容的合法性。 该技术称为对称算法身份验证。 另一种为非对称算法验证方式。 用户和验证者使用不同的密钥对文件进行加密和解密操作, 两种密钥经过一定的数学算法相联系。
不管对称还是非对称算法, 都无法摆脱被泄密的可能。 如今人们可以使用多种技术来破解这些数据。 在技术观点上, 这些技术的出现使人们对数据安全的担忧日益严重。 黑客可以通过截取通讯链路中的数据(比如信用卡信息)并使用上述技术分析其中的数据并最终破解其中的内容。
身份验证原理
身份验证是一种人们生活中最古老的技术。 验证技术可应用于:
•个人
•商务交易, 金融贸易
•绝密的文档数据等
传统的身份验证与个人信息验证联系已越来越紧密。 使用数字交互式身份验证除了可直接处理个人真实身份信息外, 还可支持在验证过程中使用假名的情况。 这种用途可广泛应用于数据保护领域。 在大多数情况下, 假名可以满足身份验证的需要。 并且在其后的过程中将其转化为个人的真实信息,使用数字签名技术的身份验证在当今已经非常流行。 该技术中包含了一个通过电子签名验证的时间戳的文档。 验证者通过用户发送过来的数字签名验证文档的合法性。 如果使用CodeMeter, 上述复杂的过程就能被大大简化并整合为一个过程。
•使用标准化的ECDSA签名
•密钥安全的存储于CM-Stick中。
•使用CM-Stick的序列号作为用户的假名。
•API简单易用, 便于开发。
•不使用共享密钥, 防止密钥泄漏
我们可以通过如下步骤来描述使用CodeMeter签名实现身份验证的过程:
1) 首先将公钥传输给验证方(仅发送一次, 且不属于绝密信息)
2) 验证方创建一组验证信息并发送至用户端用于验证。
3) 用户创建上一步骤中验证信息的HASH值和签名并发送给验证方。
4) 验证方检验数字签名的合法性
CodeMeter技术
硬件
CodeMeter的核心是一个被称为Cm-Stick的USB硬件。 它提供了基于硬件的数据加解密环境。 用于加密的密钥在其内部生成且无法在外部修改。 在Cm-Stick内部可以树状形式存储大量不同密钥。 首先, 你可以在其中找到Firm Item(FI)。 每个许可颁发者都拥有自己唯一的Firm Item, 且只有他自己有权利创建修改和删除这组数据。 其次, 您可以看到Product Item(PI)。 这组数据是签名或产品许可。 在Product Item下还有其他一些参数,即签名或许可的详细信息。 比如用于Pay-per-Use的计数器信息等。
CodeMeter可提供128-bit的AES对称算法(Advanced Encryptio•Standard)和224-bit的ECC非对称算法Elliptic Curve Cryptography)。 它也可以防止硬件上的破解, 比如拆解后分析芯片电路等。单个Cm-Stick中可以存储超过100个不同开发商的上千个许可信息。 在同一时刻, 每个许可都可以通过计数器和过期日期等手段来控制其使用。
基础结构
通过CM-Talk协议, CodeMeter提供了远程传输许可的功能。
用户访问网上商店,购买一个许可证(1)。
这个请求自动的从零售商传送到软件开发商那里(Licensor),在下一步中,用户通过付费平台付费(Collector)(2) 。
当付费平台确认后,开发商将许可证传输给用户(3)。
非对称的CodeMeter初始密钥交换
产品信息是CM-Stick中是必须,用于数字签名。ECDSA签名是通过产品信息和附加的秘密数据(私钥)计算得出的。用CM-Stick可以计算出于此私钥配对的公钥。公钥可以以两种不同的方式生成,然后发送到效验机:
•在传输和储存公钥到效验机的数据库中之前生成产品信息
•通过CMTalk编程产生产品信息
客户端
一个Java小应用程序或者一个ActiveX空间集成在登陆的HTML页面中(CM-AuthMod)。CMAuthMod反过来存取CM- Stick。CM-AuthMod简单的包括一个登陆按钮和一个复选框,因为客户可能在几个CMStick中选一个,一个输入框用来输入用户名。当登陆按 钮被点击, CM-AuthMod就和服务器创建一个SSL连接(HTTP)并且服务器发送一个询问。接受到的询问通过产品信息签名,然后通过HTTP返回给服务器。 用户名和CM-Stick序列号被传送过去。要使这个进程能够工作, 应该先在客户端安装CodeMeter驱动。
服务器端
在服务器端,两个函数必须被执行:
•生成询问
•核对签名
1) 产生一个随机的询问。它必须使唯一的并且有一个生存期。
服务器必须把这个查询存储到一个对话中,或者这个查询必须被一个密码检验标准加密。当收到请求后服务器发送一个询问到CM AuthMod过程。这个询问不是加密过的,它是明文传送的。WIBU-SYSTEMS 为生成一个密码检查的标准查询模块提供了一个用C写的范例。
2)现在,服务器检查这个查询的有效性(检查的标准,对话,生存时间)并且用储存在数据库中的这个用户名和CM-Stick序列号的公钥签名。 一个有效的签名意味着一个有效的对话。现在先前的对话将被处理。这个检查标准的模块也是有源代码范例的。这个签名的验证不需要服务器的CM-Stick。 所有的这些需要安装在服务器上的CodeMeter SDK和CmValidateSignature函数。现在SDK支持Windows, Macintosh 和 Linux。其他平台的话可以定制开发。
安全选项
CM-Stick有一个密码和一个启动功能。这个启动功能有三种可能的状态:
•Disable CM-Stick
•Enable CM-Stick until unplugged
•Enable CM-Stick
我们建议使用这个“Enable CM-Stick until unplugged”的选项。在这种状态下,每次插上CM-Stick都必须输入密码。不输入密码就不能
创建这个签名。这个用于加密的Secret Data单元能够由CM-Stick直接产生并且一直保留。也可通过CodeMeter或者WIBU-KEY的对称算法来实现。CodeMeter用 AES算法, WIBUKEY用Feal-32算法。 CodeMeter的好处在于它可以使用非对称算法。
好处
非对称算法证实了CodeMeter有很多的好处
•验证机没有密钥
•服务器不需要硬件,所以执行效率更高
•签名可用于其他目的(signatures for transactions)
•轻松的跨平台
•客户端可以很容易的集成到应用程序或者ActiveX中
•最高的安全级别
•在CM-Stick中安全的存储私钥