网路安全密匙

网路安全密匙【网路安全密匙】公用密钥加密技术使用不对称的密钥来加密和解密 , 每对密钥包含一个公钥和一个私钥 , 公钥是公开 , 而且广泛分布的 , 而私钥从来不公开 , 只有自己知道 。
基本介绍中文名:网路安全密匙
用途:网路身份验证
特点:通用 , 安全
通俗解释:在网路中使用的密钥
加密类型:对称加密、非对称加密和Hash加密
原理:按照规则使数据进行重新排列组合
基本简介用公钥加密的数据只有私钥才能解密 , 相反的 , 用私钥加密的数据只有公钥才能解密 , 正是这种不对称性才使得公用密钥密码系统那幺有用 。使用公用密钥密码系统进行认证认证是一个验证身份的过程 , 目的是使一个实体能够确信对方是他所声称的实体 。下面用简单的例子来描述如何使用公用密钥密码系统来轻易的验证身份 。注:下面的 key 表示something 已经用密钥 key 加密或解密 。加密解密雏形假设A要认证B , B有一个密钥对 , 即一个公钥和一个私钥 , B透露给A他的公钥(至于他是怎幺做的将在以后讨论) 。然后A产生一段随机的讯息 , 然后把它发给B 。A-->B random--messageB用自己的私钥来加密这段讯息 , 然后把加密后的讯息返回给A 。B-->A B's--private--keyA接到了这段讯息 , 然后用B以前发过来的公钥来解密 。她把解密后的讯息和原始的讯息做比较 , 如果匹配的话 , 她就知道自己正在和B通信 。一个入侵者应该不知道B的私钥 , 因此就不能正确的加密那段A要检查的随机讯息 。数字签名除非你确切的知道你在加密什幺 , 否则用你的私钥加密一些东西 , 然后发给别人永远不是一件好事 。这是因为加密后的数据可能会背叛你(记住 , 只有你能加密 , 因为只有你才有密钥) 。所以 , 我们不加密A 传送的原始讯息 , 取而代之的是 , 由B构造一个讯息摘要 , 然后加密它 。讯息摘要是从随机讯息中以某种方式提取出来的 , 并且具有以下特点:- 摘要很难逆转 , 任何假冒B的人不能从摘要得到原始讯息- 假冒者无法找到具有相同摘要的不同讯息通过使用摘要 , B能够保护自己 。他首先计算出A发给他的随机讯息的摘要并加密 , 然后把加密后的摘要返回给A , A可以计算出相同的摘要 , 通过解密B的讯息然后对比一下就可以认证B的身份 。这个过程就是传说中的数字签名 。A-->B hello,are you B?B-->A A,This Is B{digest[A,This Is B]}B's-private-key当B使用这个协定的时候 , 他知道自己发给A的是什幺讯息 , 并且不介意签名 。他首先传送没有加密的讯息“A,This Is B” 然后传送加密的摘要 。A能够轻易的判断B是B , 并且B没有签任何他不愿意签的东西 。分发公钥与证书B如何以一种可信赖的方式分发他的公钥呢?我们假设认证协定是这个样子的:A-->B helloB-->A Hi, I'm B, B's-public-keyA-->B prove itB-->A A, This Is B{ digest[A, This Is B] } B's-private-key如果使用这个协定的话 , 任何人都可以是B 。你需要的只是一个公钥和私钥 , 你跟A慌称你是B , 接着你用自己的公钥代替B的公钥 , 然后你通过用你的私钥加密的东西来证明 , 这样A就不能分辨出你不是B 。为了解决这个问题 , 标準化组织发明了一个叫做证书的东西 , 一个证书包括下面的一些内容:- 证书发行者的名字- 证书传送给的团体- 主题的公钥- 一些时间戳证书是由证书发行者的私钥签名的 , 每个人都知道证书发行者的公钥(即证书发行者有一个证书 , 等等) 。证书是一种把公钥绑定到名字的标準方式 。通过使用证书这种技术 , 每个人都可以通过检查B的证书来判断B是不是伪造的 。假设B严格的控制着他的私钥 , 并且的确是b得到了他的证书 , 那幺一切都好 。下面是补偿协定:A-->B helloB-->A Hi, I'm B, B'S-certificateA-->B prove itB-->A A, This Is B{ digest[A, This Is B] } B's-private-key当A收到B的第一条讯息 , 她可以检查证书 , 核实签名(如上 , 使用摘要和公钥加密) , 然后 , 核实主题(B的名字)来判断那是不是真的B 。这样她就相信公钥是B的公钥 , 然后要求B证明他的身份 。B则重新进行一次上面的相同过程 , 计算讯息的摘要 , 签名之后发给A , A可以用从证书得到的公钥检查B的讯息摘要 , 从而判断B的身份 。防止数据篡改与讯息认证码假设有个坏家伙H , 虽然不能发现A和B交换的秘密 , 但是他可以干预并且破坏他们的对话 。举例来说 , 如果H位于A和B之间 , 他可以选择让大多数的讯息返回以及向前继续传输没有改变 , 但是破坏了特定位的讯息 。A-->H helloH-->B helloB-->H Hi, I'm B, B's-certificateH-->A Hi, I'm B, B's-certificateA-->H prove itH-->B prove itB-->H A, This Is B{ digest[A, This Is B] } B's-private-keyH-->A A, This Is B{ digest[A, This Is B] } B's-private-keyA-->H ok B, here is a secret B's-public-keyH-->B ok B, here is a secret B's-public-keyB-->H {some message}secret-keyH-->A Garble[ {some message}secret-key ]H一直让数据没有改变的通过 , 直到A和B分享一个秘密 。然后H通过改变B传送给A的讯息来进入这个方式中 。这时候A是相信B的 , 因此她就可能相信这个改变的讯息 , 然后按照它来做 。注意H并不知道这个秘密-他能做的所有事就是破坏用这个秘密的密钥加密的数据 。他可能不能利用这个协定製造出一条有效的讯息 , 但是下一次 , 他可能会幸运一点 。为了防止这种破坏 , A和B在他们的协定中引入了一种讯息认证码(MAC) 。MAC是根据秘密的密钥和传输的数据计算出来的 , 上面描述的摘要算法的属性正好可以用于构造抵抗H的MAC功能 。MAC := Digest[ some message, secret ]因为H不知道这个秘密的密钥 , 所以他无法计算出这个摘要的正确数值 。即使H随机的改变讯息 , 如果摘要数据很大的话 , 他成功的可能性也很小 。举例来说 , 通过使用MD5 , A和B能和他们的讯息一起传送128位的MAC值 。H猜中这个正确的MAC值的几率是 18,446,744,073,709,551,616 分之1 。下面是样本协定 , 又订正了一次:A-->B helloB-->A Hi, I'm B, B's-certificateA-->B prove itB-->A {digest[A, This Is B] } B's-private-keyok B, here is a secret B's-public-key{some message,MAC}secret-keyH现在有麻烦了 , H可以改变任何的讯息 , 但是MAC的计算将揭露他的欺诈行为 。A和B能发现伪造的MAC值并停止会话 , H就不能伪造B的讯息了 。但是这样同样不能防範H鹦鹉学舌 。如果H记录了会话的过程 , 他虽然可能不知道会话的内容 , 但是他可以重放这些会话 。实际上 , H能在A和B之间做一些真正龌龊的事 。