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

xiaoxiao2021-03-01  13

【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是由服务端产生的,同时还没有过期。 则表示登陆成功了。)

相关资源:带音效新年烟花动画特效-HTML-代码
转载请注明原文地址: https://www.6miu.com/read-4049961.html

最新回复(0)