zoukankan      html  css  js  c++  java
  • 用户卡和机具进行双向认证

    问题的提出:

    1、传统的“对暗号”

    经典片断:
    问:天王盖地虎
    答:宝塔镇河妖

    互相握手,拥抱,同志呀同志!可终于找到你了

    相信大家一定看过间谍电影中地对暗号片断,但是暗号容易被敌人窃取,于是有了革命者惊险或悲壮的故事,当
    然了其中不乏有叛徒的出卖。

    安全分析:
    对暗号中容易出现暗号被第三方窃取的情况,其中存在很大的安全隐患,相信大家一定印象深刻,深有体会。

    2、密码学中对“对暗号”的借鉴

    在传统的对称密码学体系中,用密钥来代表双方的暗号

    暗号=密钥

    当然了,暗号越复杂,即密钥长度越长越安全
    但暗号太复杂,越不容易记住,所以实际应用中密钥长度也不会太长(现在比价流行使用128位的密钥)
    至于对称密码算法:CPU卡中使用的一般为3DES(112位),其它的128位的如IDEA、AES等

    3、密码学中的双向认证的实际做法

    由于直接对暗号存在不安全的隐患,所以密码学中并不直接判断两个密钥是否相等

    而是采取一次一密的情况。
    什么是一次一密呢?
    就是:
    1、每次都由一方产生一个随机数
    2、双方都用密钥计算随机数得到一个值
    3、比较随机数的计算值是否相等

    这样就避免了密钥泄露的问题,因为每次得到的都是临时值,所以每次都必须去计算随机数,而
    密钥又是被读出的,只能用来计算(通过使用指定的密钥标识来计算)。

    所以就算泄露了随机数的计算值也没关系,因为下一次这个计算值并不能被使用。

    4、CPU卡中的双向认证的实现

    实体:CPU卡 机具

    CPU卡中存放一个密钥
    机具中存放和CPU卡相同的密钥


    CPU卡外部认证步骤:
    1、CPU卡产生一个8字节随机数送给外部程序,CPU卡临时保存随机数在卡内
    2、外部程序把8字节随机数送给机具,机具用密钥计算随机数,得到8字节随机数密文
    3、外部程序把8字节随机数密文送给CPU卡
    4、CPU卡在卡片内部解密8字节随机数得到随机数明文,
    5、CPU卡在卡片内部把解密后的随机数和步骤1中临时存放的随机数比对,若相等,则外部认证成功

      所以外部认证是CPU卡认证机具。

    机具内部认证步骤:
    1、机具产生一个8字节随机数送给外部程序,机具临时保存随机数在机具中
    2、外部程序把8字节随机数送给CPU卡,CPU用内部认证密钥计算随机数,得到8字节随机数密文
    3、外部程序把8字节随机数密文送给机具
    4、机具解密8字节随机数得到随机数明文,
    5、机具在内部把解密后的随机数和步骤1中临时存放的随机数比对,若相等,则内部认证成功

    所以内部认证是机具认证CPU卡

    这样机具和CPU卡从而达到了双向认证

    5、密钥的分散问题

    由于一个机具必须可以认证n张卡片,而每张卡片的密钥都不相同

    一般的想法:必须有n个机具对应n张卡片,但是这样代价太高,也不现实

    密码学中提出了一个方法,即密钥分散的方法。

    即机具中存放的是用户卡的母密钥,每次认证的时候,由母密钥根据用户卡的标识

    计算得到用户卡的密钥。

  • 相关阅读:
    Struts2的配置中:Could not find action or result 问题的解决方法
    Oracle 数据库 Record is locked by another user 问题解决办法
    设计模式六大原则(2):里氏替换原则
    在PL/SQL中 自动复制转换StringBuffer的SQL
    反射setAccessible()方法
    对允许任意图片上传的发布内容模式的啊哈的想法
    如果你真的想做一件事,你一定会找到一个方法;如果你不想做一件事,你一定会找到一个借口.
    xaml 的 intellisense失效的解决办法
    Blog技术词汇之Rss篇 什么是Rss以及其定义[翻译]
    多个存储过程之间相互调用的原子性问题
  • 原文地址:https://www.cnblogs.com/zhangxiaosong/p/3343141.html
Copyright © 2011-2022 走看看