`
eyesmore
  • 浏览: 376131 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

实际项目中的简单数字证书(非国际标准)

阅读更多

【1、数据加密安全】

       在实际项目中,密钥分层最常见的是: 一个主密钥,该密钥一般是长期固定的,密钥重送往往是线下进行的,比如电子邮件、快件或电话。一个工作密钥,也叫会话密钥或工作密钥,该密钥是经常变化的,往往是每次登陆系统时就动态分配一个(由于动态分配的,经常变化,所以密钥分发不可能再通过线下的方式),密钥分发是在线完成的,为了保证密钥在网络上传输的安全性,往往会用主密钥对其进行加密。

      另外,主密钥往往是非对称的,而会话密钥往往是对称的。原因很简单,对称加密速度快,非对称速度慢,对于大数据块(交易报文)用对称的更好,所以会话密钥最好采用对称的,但是对称密钥容易被泄漏,分发不方便,于是我们希望对称密钥在网络上传递的时候,能够以密文的形式传递,同时对称密钥数据并没有多大,用非对称的对它加密速度不是瓶颈,而是要强调安全,于是当A要给B发送一个会话密钥时,一般会用B的公钥进行加密发给B,这样只有B才能解开。

     下面大概描述了一个实际的应用场景: 一个电信运营商(telecom)和一个数据业务服务提供商(sp)的合作。tel是个大公司,安全方面做得很好;sp是个小公司;在合作中,自然tel起主导地位,通信接口采用的tel指定的标准统一接口(之所以说“标准统一”是因为其他sp要和tel合作时也都是走这个接口,对于tel来说,这样自然方便管理和节约成本)。tel为了保证用户(一般手机使用者)信息从sp到tel传输过程的安全性,tel要求sp使用数据加密。如果,使用非对称加密则问题很好解决,tel生成一个公钥和私钥,私钥留给自己,公钥发给sp(由于对于sp来说tel是可信任的,而且tel一般通过电话的形式告诉sp公钥,所以不需要弄个CA那么复杂),交易时sp直接用公钥加密后发给tel,这样只有tel才能解读报文。但是,刚说了非对称速度慢,于是采用对称的(就是上面描述的形式),问题随之来了,这个动态的对称会话密钥由谁来产生呢?显然tel相对sp来说是服务提供商,tel拥有的资源多,所以sp登陆tel时,登陆成功后tel会产生一个会话密钥发给sp。tel要给sp发个信息(该信息是动态会话密钥),于是肯定希望用非对称给加密进行密文传送,按道理sp应该产生一对配对的公钥和私钥,把公钥告诉tel。但是,由于sp是个小公司,没太有这方面的意识,于是tel帮把这事给做了,tel产生了一对配对的公钥和私钥,并把“私钥”给了sp,“公钥”保留在tel那(当然私钥也有)。tel要求sp,(1)交易必须进行数字签名,即先对报文的一些字段进行摘要,然后用sp.私钥进行签名,从而tel保证该交易一定是sp发的。[这里提醒的是:sp的私钥也是tel给生成的](2)交易必须进行数据加密,sp签完名后,将签名信息追加在交易信息后面。[说明:如果用非对称的加密,那么此时应该对这些信息再用tel.公钥进行加密]。由于,考虑到速度问题,采用的是动态对称密钥对数据进行加密,于是sp再用登陆时获取的动态会话密钥进行加密。(3)tel如何将动态的会话密钥传递给sp? 显然是用sp.公钥进行加密,sp在登陆成功后,收到来自tel的会话密钥的密文形式,就用sp.私钥去解出明文。  我们回到(1)前面那句话,实际上sp.私钥+sp.公钥是由tel替sp生成的,tel需要把sp.私钥传给sp(原本如果sp生成,则sp只要把sp.公钥给tel),tel如何保证这个安全性?无非也是加密。另外,值得注意的是RSA算法中既可以说对公钥和私钥有严格定义,也可以说没有严格定义。有严格定义的意思是:private key = (modulus, private exponent); public key = (modulus, public exponet);而且更重要的是public exponent一般比较小,private exponent比较大,由private exponent可以推到出public exponent,但是public exponent推不出private exponent。 没严格定义的意思是: public key和private key在加密和解密上地位是等价的,public 加密,private就能解密;private加密,public 就能解密。这样说来private和public谁被公开了,谁就成了公钥。刚才的,tel把“sp.私钥”在网络上传递,这样,“sp.私钥”就无意成了“现实的公钥”,另外,考虑到私钥能推导出公钥,那么如果sp.私钥在传输的过程中被泄漏了,则等价于泄漏了公钥和私钥;与其这样,tel就想到还不如把“sp.公钥”谎称为私钥发给sp。 然后让sp就用“sp.公钥”进行签名。因为,tel向sp谎称了这个就是私钥,sp肯定不会把它告诉别人。真正的私钥只在tel有,不会在网络上传递。如果tel将sp.公钥通过网络被黑客截获了,那么损害的也仅仅是sp的利益,因为最多黑客利用sp.公钥去伪造签名。所以,这就是实际项目中sp实际上是在用tel给生成的公钥当作sp自己生成的私钥在进行数字签名。

 

下面是某个tel给sp产生的自定义的“数字证书”(并不遵循X.509国际标准)

-----------------------------------------------------------------------------------------------------------------------

数字证书:

DPLAT-ID:123456        (sp在tel那边的编号,因为tel有很多sp与其合作,tel得对每个sp进行个编号。)
PUBLIC-KEY:b2444b481bfabb32235fb6bc7fcec353f4abe8f51737bbf4b93739aa93f4158b7e0e10f2fe75361ea606c8c031d868e52f3a70006af1fb25fa0bc59588f23e9cbed4e3026884169ec73ff31d0f36ba79648bae1e91a72489aced2d50d69f8a522fc48c5e8ff2420fdda9b594a2ce54a8a40c8de158761a7680053bf23a0621b225cbac7df4489f2460adf2731aa0093e52bbe72f18e0a4965929e184de89845ff46327c81ab2461191a70c0e5454d4588a43217b4bdea58be0b3f8c5eb945607dee1265a5027e0f3ec2ea3ae2c6f58a503f8fedb4458706d14ed77f72e7df95f5684ad8c758fc973dfd8e7a9a16c863415a942c238b9d8780dc2a911c25c300150ac4349c9d7d26cf7b4b1dd73666efb502015e65d40cb0876938c75e77b560e88ea27c0482c865c0a9e6ef4fc35ab841fbedc470327cab8e37f795bb508a0f57461f4e56c6e59a16b6d34461cb3b544f639fe122e321fb7831d37c41ca2149103c098aebd809164051e25d16fd6c5e5128b18e83a77e0a23fa580eaac4d9e974c1cde24c308a04fbba507f6d6f8142b0ef3f322e304256e7bde709e3746377f2c028dd11cb41727a1371b034f855ab1b8be7e0a917c9278390f9b4df65bdc354b0489deb2a90232c5d260f1041cc30b1f4255fdfdb2455ba9fd8ceb31b9bb09fb26c0e221623875151f356e4e0342a8068cea19b1633871035d93636f67e236eff85066f39f40d3

(tel替sp生成的RSA密钥对中的算法公钥,但是因为tel要求sp把它当作私钥进行签名,所以即使是个公钥也不允许明文传递,于是用了个DES加密。然后,tel给sp发这个证书的时,再电话告诉sp一个DES密码,被称为“平台密码”。)
MD5-FIELDS:
EXPIRE-DATE:2008-04-30

------------------------------------------------------------------------------------------------------------------------

 

 

解答证书中的PUBLIC-KEY:

平台密码:e5d32c0df2b0e031

 

 

=========================================================

http://en.wikipedia.org/wiki/Session_key

 

A session key is a single-use symmetric key used for encrypting all messages in one communication session . A closely related term is traffic encryption key or TEK , which refers to any key used to encrypt messages as opposed to different uses, such as encrypting other keys (key encryption key )

会话密钥(Session Key)是在一次通信会话中(communication session)中产生的,并仅一次性使用的(single-use)的一个对称密钥(symmetric key)【也就是communication session开始,则session key 开始;communication session结束,则sesssion key结束】。session key也被称作是traffic encryption key(国内翻译成:交易密钥),之所以称为交易密钥,是从它的用途说的,相对其他的加密密钥(密钥本身不是用来对报文加密,而是用来加密其他密钥,以帮助其他密钥进行安全的分发。典型的是非对称密钥去加密对称密钥,功能是帮助对称密钥的分发。 这类密钥被称为 key encryption key。  国内一般翻译成: 主密钥)

 

Session keys introduce complication in a crypto system , normally an undesirable end. However, they also help with some real problems, which is why they are used. There are two primary reasons for session keys:

(Session Key的引入,使得加密体系变得复杂了。  这就是我们常说的“分层加密体系”。因为在这个系统中包括很多key,至少有session key 和 key encryption key (master key))。不过这样做的确能解决些实际问题,主要有两方面:

  • First, several cryptanalytic attacks are made easier as more material encrypted with a specific key is available. By limiting the material processed using a particular key, those attacks are made more difficult.
  • Second, asymmetric encryption is too slow for general purpose use, but many otherwise good encryption algorithms require that keys be distributed securely before encryption can be used. All secret key algorithms have this undesirable property. By using asymmetric encryption to distribute a secret key for another, faster, symmetric algorithm, it's possible to improve overall performance considerably.

Like all cryptographic keys , session keys must be chosen so that they are unpredictable by an attacker. In the usual case, this means that they must be chosen randomly. Failure to choose session keys (or any key) properly is a major (and too common in actual practice) design flaw in any crypto system.

 

 

 

 

【2、权限控制   (交易鉴权)】

 

tel服务端就是个servlet;

sp客户端使用HTTPClient+XML;

 

sp并不能访问所有的servlet,tel会对servlet的访问进行权限控制。权限控制的级别包括:(1)源IP限制;(2)操作员限制;(3)交易限制。

 

“操作员”的概念是sp客户端要登陆tel服务端的系统,要有一个账号和密码。登陆时提供的UserId和UserPwd指的就是操作员标识和密码。因为,服务端会对请求方进行访问控制,其中包括操作员访问控制,因此我们会看到很多交易请求中,除了携带用户(最终手机用户)的MobileNo外,还有一个UserId,这个UserId就是操作员的ID。这样,站在服务端的角度来看,最终用户(MobileNo的拥有者)做一个交易,实际上是通过操作员(UserId)代理的。这正如我们在移动营业厅办理业务一样,客户并不直接操作移动BOSS系统,而是通过营业员先登陆BOSS,客户把需求告诉营业员,营业员把需求告诉BOSS系统。或者可以认为是服务端对各种不同的最终用户进行了分类管理,UserId可以认为是一类具有某种特征的用户的集合(比如UserId代表品牌)。

 

 

【3、会话跟踪】

 

由于该协议采用了HTTP的短连接,因此需要增加一个SessionId来确认登录状态,我们不采用HTTP协议默认的登录SessionId,采用在任务头里面增加一个SessionId的标志确认,现在约定如下当NBMS系统发送登录请求的时候,任务头里面的SessionId填写为0,DBMP收到登录请求以后,确认以后,产生一个长度最大为32位的整形数,并放到登录应答的任务头的SessionId返回给NBMS,以后NBMS再发出的请求任务的任务头里面就必须带有这个SessionId的值用于表示是这次会话的任务。相应的DBMP里面要保存这个SessionId的值用于识别会话。
由于考虑到可能发生的网络异常,服务器需要知道客户端还是否存在,因此协定DBMP平台必须要对Session进行管理(必须支持多Session管理),设定超时,如果在一定的时间里面既没有收到NBMS发送过来的正常报文,也没有收到NBMS发送过来的心跳报文,则认为超时,也就是认为客户端已经不存在。

 

(SessionId非0,而且SessionId是由服务端产生的,同时还没有过期。 则表示登陆成功了。)

分享到:
评论

相关推荐

    cer二进制,base64及证书链解析api和头文件

    在IT领域,尤其是在网络安全和加密通信中,证书是至关重要的组成部分。本文将深入探讨"CER"二进制文件、Base64编码以及X....在实际项目中,可能还需要结合其他库和工具,如OpenSSL,来完成更复杂的证书管理和验证任务。

    浅谈工业互联网网络信任体系建设.pdf

    同时,体系还兼容并支持国际上的标准和协议,以便在国际交流和合作中无障碍地进行互联互通。 在国家层级建设方面,网络信任体系包括密钥管理和证书管理两大部分,密钥管理涉及到国家级密钥管理中心、数据库和服务器...

    org.bouncycastle 加密算法包 最新1.69版

    ** org.bouncycastle 加密算法包详解 ** `org.bouncycastle` 是一个开源的 Java 库,专门用于实现各种加密算法...在实际项目中,使用 Bouncy Castle 可以显著提高代码的安全性和效率,同时降低了与加密相关的复杂性。

    专业课网页制作课程标准.docx编程资料

    - **网页设计流程**:通过实际项目,掌握从需求分析到页面上线的完整网页设计流程。 - **工具使用**:熟练使用Photoshop、Dreamweaver、Flash等工具进行网页设计与制作。 - **网页布局与美化**:学会合理布局网页...

    ASN.1 傻瓜用书(english)

    ASN.1,全称为抽象语法标记一,是一种标准化的数据表示语言,由国际标准化组织(ISO)和国际电信联盟(ITU-T)共同制定。这个标准主要设计用于在不同系统之间交换结构化数据,尤其在通信协议、数据库和软件工程中...

    希赛软考学院系统分析师考试辅导与培训_新技术应用资料

    数字证书则由可信第三方颁发,用于证明持有者的真实身份。 ##### 3.3 数字签名的产生、发送与认证 数字签名的产生和发送过程涉及到一系列加密操作,而认证则需要验证签名的有效性。 ##### 3.4 数字签名认证中存在...

    VC_PCSC.rar_PCSC_pcsc document

    **PCSC(Personal Computer Smart Card)简介** PCSC(个人计算机智能卡)是一个开放的、跨平台的API标准,主要...通过学习和理解PCSC,开发者可以更好地掌握智能卡技术,并在实际项目中实现安全、可靠的智能卡应用。

    数字机顶盒加自办节目 接收系统设计方案 .doc

    该工程项目内所建议选用的产品均获认证,产品质量符合国家和国际标准,功能具先进性、适用性、可靠性和稳定性。 2.售后服务 对整个系统实行一年内免费维护和保修; 三年内属人为因素问题造成的器材损坏,只收取元...

    超级有影响力霸气的Java面试题大全文档

     异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获...

    网管教程 从入门到精通软件篇.txt

    如果系统检测到无效或非标准分区表标记,将提示用户是否继续执行该命令。除非您访问驱动器有问题,否则不要继续进行。向系统分区写入新的主引导记录可能破坏分区表并导致分区无法访问。  format  将指定的驱动器...

    IT运维整体解决方案介绍.

    - **ISO20000**: ITIL的国际标准认证,为IT服务管理提供了一套完整的规范体系。 #### 四、IT运维项目建设步骤 1. **需求分析**: 明确客户需求和业务目标。 2. **方案设计**: 结合实际情况,设计适合的运维架构和...

    JDK帮助文档

    JDK提供了全面的国际化和本地化支持,包括日期、时间、数字格式化,以及多语言资源包的管理。 这些只是JDK1.6至JDK1.8中部分关键知识点的概述,实际内容远不止于此。CHM帮助文档则提供了详细的API参考、教程和示例...

Global site tag (gtag.js) - Google Analytics