黑客会写什么签名(黑客的签名)

hacker|
93

测试那些事儿(十三)- 签名和验签、公钥和私钥、加密和解密

在做接口测试时,大家一定都遇到过需要提供签名的场景。这时,我们就会被各种名词比如 签名和验签、公钥和私钥、加密和解密 冲击。所以,了解一下它们很有必要,可以帮助我们知道为什么要这么做,而不是简单的去当一个验证执行者。甚至,在你了解了它们之后,你也可以在接口的安全性测试上更进一步。

数字签名其实就是一个别人无法仿造,能够证明申请者真实性的一段字符串。 我们在真实生活中,最常用的签名应该就是手签我们的姓名了。

所以,在接口请求时,很多接口也不是你来一个请求我就给你返回你要的数据,而是要验证你的签名,进而证明你的身份后才能做出后续动作。在此过程中,接口调用者需要进行的工作就叫做 签名 ,而被调用者需要进行的工作就叫做 验签 。

公钥 :由接口被调用方提供,RSA 密钥体系中对外公开的部分,通常用于数据加密、验证数字签名。

私钥 :由接口被调用方提供,RSA 密钥体系中非公开的部分,需由接口调用方严密保存,通常用于数据解密、数据签名。

这个就很好理解了,传递数据时为了保证数据的安全性,不进行明文传递,而是通过某种算法对敏感数据进行 加密 ,传递后再由接收方使用对应算法进行 解密 来获取明文信息。

将上面的定义总结为图,会更加的清晰:

之所以用发送方的私钥加签,是因为,即便信息被黑客拦截,黑客修改了信息,但是加签需要用发送方的私钥,黑客没有发送方的私钥,所以也无法生成正确的签名,接收方验签就不用通过。

反之如果用接收方的公钥加签,如果信息被黑客拦截,黑客修改了信息,因为接收方的公钥是公开的,黑客就可以重新生成新的签名,替换原有的签名,发送出去,接收方接收到信息,拿自己的公钥校验是通过的,所以接收方无法辨别信息是真正的发送方还是黑客发送过来的,这样的加签不能辨别信息是否被篡改过。

之所以用接收方的公钥加密,是因为,如果信息被黑客拦截,需要用接收方的私钥来解密,黑客无法获取接收方的私钥,即便拦截了信息(情报),黑客也无法看到明文,只能看天书?了。

反之,如果用发送方的私钥加密,如果信息被黑客拦截,因为发送方的公钥是公开的,黑客就可以用发送方的公钥解密密文获得明文,这样的加密所有的人都可以看到明文,不能保证信息的隐私。

了解了以上这些知识,在测试过程中就可以更加深入的了解签名的目的,进而可以更深入的了解签名的实现等。签名的实现有很多种,这个要根据每个团队选择哪种具体分析,但作为测试,基本上我们都是可以按照约定的规则来生成的,这也帮助我们扩展了接口测试覆盖的广度(如接口用例覆盖度、过期时间等隐藏功能),是非常有意义的。

报文加密和签名设计

        数据信息安全对我们每个人都有很重要的意义,从接触互联网起,我就明白了数据的重要性,我对数据安全的要求极其高,毫不夸张的说我的电话从来没有接过推销和骚扰电话,我本人很讨厌这种事情,对买卖数据和泄露数据的事情比较痛恨,自从做了金融以后,我对数据安全的认识又有了新的认识,接过几家支付通道后,对支付方面的业务有了了解,根据业务需要我开始写支付外放接口,说实话安全设计很让我头痛,最初使用的方式是对报文进行 MD5 加密,并得出一个签名串, 签名串=MD5(原文密钥) ,如果黑客截取报文,并篡改报文,那么服务端进行验签的时候,将不会通过,因为报文变化了,算出的签名串会改变,那么黑客需要重新计算出签名串,要算出签名串,需要知道加密规则,密钥,这种方式虽然保证了安全,但是存在一个问题,报文是暴露的,黑客并不更改数据,他只是记录保存你暴露的数据,这样也是非常危险的,经过借鉴和学习采用了另一种解决方案, 为保证接口调用过程中报文的完整性,报文使用 MD5 签名算法,为保证接口调用过程中对用户的敏感信息的保护,对涉及用户敏感信息(如账号,名称,手机号等)的域进行 AES 加密 。

        采用 MD5(data+"key="+md5Key).toUpperCase() 方式签名,其中: md5Key 为自己规定的 MD5 签名密钥。最后将获取到的签名串转换为大写。设所有发送或者接收到的数据为集合M,将集合M 内非空参数值的参数按照参数名 ASCII 码从小到大排序( 字典序),得到字符串,使用 URL 键值对的格式( 即 key1=value1key2=value2 … ) 拼接成字符串 data 。在 data 最后拼接上 key 并对其进行 MD5 运算,再将得到的字符串所有字符转换为大写,得到签名值。

        AES 加密模式为 "AES/ECB/PKCS5Padding" ,待加密数据使用 AESKey 加密之后做 Base64 得到加密数据。 AESKey 长度为16 位,由26个字母和数字组成。

博客原文地址: 报文加密和签名设计

数字签名和数字证书究竟是什么?

我们经常会见到数字签名和数字证书的身影,比如访问一些不安全的网站时,浏览器会提示,此网站的数字证书不可靠等。那么究竟什么是数字签名和数字证书呢?本文就将通过一个场景深入浅出的介绍数字签名和数字证书的概念!

Bob有两个密钥,一个叫公钥Public Key,一个叫私钥Private Key。

Bob的公钥是公之于众的,所有需要的人都可以获得公钥,但Bob的私钥是自己私有的。密钥用来加密信息,将一段可以理解阅读的明文信息,用密钥进行加密,变成一段‘乱码’。因此,只有持有正确密钥的人,才能重新将这段加密后的信息,也就是‘乱码’,恢复成可以理解阅读的真实信息。Bob的两个密钥,公钥和私钥都可以将信息进行加密,并且能用对应的密钥将信息解码,也就是说,如果用Bob的公钥将信息加密,那么可以并且只可以用Bob的私钥将信息解码,反之,如果用Bob的私钥将信息加密,那么可以且只可以用Bob的公钥将信息解码!

所以Bob就可以利用自己的公钥和私钥进行信息的加密传输!

比如,Susan想要和Bob进行通信,考虑到信息的安全性,Susan可以利用Bob公之于众的公钥对所要传输的信息进行加密。这样,Bob收到信息后,就可以用自己的私钥对信息进行解码。假设此时有人窃取了Susan传给Bob的信息,但是由于没有Bob的私钥,无法对信息进行解码,所以即使窃取了信息,也无法阅读理解。

但是虽然黑客们无法解码Susan传给Bob的信息,却可以对信息进行篡改,破坏原有的信息,这样Bob收到被篡改的信息之后,再用自己的私钥进行解码,就会与Susan本来想要传达的信息出现不一致,这样也就相当于破坏了Susan和Bob的信息传输!学术上,我们将这种行为称为破坏信息的完整性!通俗的说,就是我得不到的信息,你也别想得到!

所以,现在的问题就是,我们如何保证信息的完整性,也就是保证信息不被破坏,或者说,当信息被破坏之后,接收方可以识别出,这个时候的信息是被破坏过的,就将其丢弃。

数字签名就可以解决上述的问题!根据数字签名,接收方接收到信息之后,可以判断信息是否被破坏过,如果没有被破坏,就可以正确的解码,如果被破坏,就直接丢弃。

数字签名可以保证对信息的任何篡改都可以被发现,从而保证信息传输过程中的完整性。

那么数字签名是如何实现对完整性保证的呢?关键技术就是hash,也就是哈希技术。

首先,Bob先对将要传输的信息进行hash,得到一串独一无二的字符,通常把hash之后的内容称为 信息摘要message digest 。我们都知道,hash往往是不可逆的,就是说,我们无法根据hash后的内容推断出hash前的原文。同时,不同的原文,会造成不同的hash结果,并且结果的差异是巨大甚至毫无规律的。也就是说,对原文进行再细微的修改,得到的hash后的内容都会与未经修改的原文的hash内容大相径庭。这样就保证了黑客对原文的任何修改都会被发现!

Bob同时将hash后的信息摘要,用自己的私钥进行加密,这样就保证只有Bob的公钥才能对信息摘要进行正确的解码,这样就保证了信息摘要一定是来自Bob的,也就是起到了一个独一无二的签名的作用。

加密后的信息摘要实际就是数字签名的内容。

最后,Bob再将数字签名附加到原文信息的后面,这样就形成了一个完整的带数字签名的信息报文。

Bob将带数字签名的信息报文传输给Pat。

Pat接收到信息之后,先利用Bob的公钥对数字签名进行解码,得到信息摘要,如果成功解码,就说明数字签名是来自Bob的,因为数字签名是Bob利用自己的私钥进行加密的,只有Bob的公钥可以进行解密。然后,Pat将信息原文进行hash得到自己hash的信息摘要,再与之前解码数字签名得到的信息摘要进行对比,如果相同,就说明原文信息是完整的,没有被篡改,反之,则确认信息被破坏了。

似乎现在,利用公钥和私钥以及数字签名,我们可以保证信息传输过程中的私密性和完整性。但还存在一个问题,就是公钥分发的问题,我们如果保证Bob的公钥被正确的分发给了Susan或者Pat等人呢?假设现在有一个中间人,他劫取了Bob发给Pat的公钥,然后私自伪造了一个假的公钥并加上Bob的名字,发给了Pat,这样就导致Pat永远实际上就是在跟中间人通信,和Bob也实际上在跟中间人通信,但都以为在跟对方通信。因此,现在的问题就是,Pat如何确认收到的公钥真的是Bob的公钥,而不是别人伪造的!

这个问题,其实可以类比一下现实生活中的问题。我们知道,公钥和私钥是成对存在的,也就是一个人一般都有一对独有的公钥和私钥。就好像我们每个人都有一个独有的身份证,我们把公钥类比为现实中的身份证,当我们在面对一个陌生人的时候,我们为了信任对方,一般可以查看对方的身份证,但此时就存在一个和上面中间人问题一样的漏洞,就是万一对方给的身份证是一个假的伪造的身份证呢?也就是万一对方给的是一个假的公钥呢?我们怎么识别真伪?现实中,我们往往会有一个身份证真伪的识别器,一般公安局等机构会有,也就是我们可以利用身份证真伪的识别器确认这个身份证的真假。我们仔细思考这个机制,实际上就是引入了一个独立的第三方机制,国家作为一个独立的第三方,给我们每个人创建了一个身份证,当我们需要验证身份证的真伪的时候,我们只需要找这个独立的第三方提供的真伪鉴别服务就可以验证身份证的真伪。

所以,相似的我们解决公钥分发问题的思路也就是引入一个独立的权威的第三方机构。

假设现在有一个数字证书的权威认证中心,这个中心会给Bob创建一个数字证书,这个数字证书包括了Bob的一些信息以及Bob的公钥。

那么,此时,想要跟Bob进行通信的人,就可以检查Bob的数字证书,然后向权威的数字证书的认证中心,去认证这是不是真实的Bob的数字证书,如果是,就可以从数字证书中获取到Bob的公钥,然后进行安全的通信。同时,就像现实生活中一样,我们不管进行任何涉及到资金或者安全问题的时候,都需要出示自己的身份证,并且对方会验证你的身份证的真假,也就是说,一个持有假身份证的人,或者没有身份信息的人是获取不了他人的信任的。同理,在网络通信中,如果在数字证书的认证中心中查询不到信息,那么就说明这样的通信方是不安全的,是不值得信任的!另一方面,数字证书除了解决了公钥分发和身份认证的问题,还加强了安全性。

详细的利用数字证书的通信过程如下:

上述的公钥分发和数字签名验证的过程似乎很复杂,但实际上,就跟我们验证身份证真伪一样,我们通常有一个识别器,只要将身份证放上去就可以得到结果,后面的实际过程往往不需要我们关心,网络通信中也是如此,往往会提供一个友好的用户接口,想要验证数字签名或者数字证书,其实就类似于我们点击一下按钮一样简单!

个性签名写什么吸引人

1.若我白发苍苍,容颜迟暮,你会不会,依旧如此,牵我双手,倾世温柔。

2.来生,想做一朵蒲公英,无牵无挂,无欲无求,起风而行,风静而安。不乱于心,不困于情,不畏将来,不念过去,如此,安好。

3.到了一定年龄,便要学会寡言,每一句话都要有用,有重量。喜怒不形于色,大事淡然,有自己的底线。

4.人的一生注定会遇到两个人,一个惊艳了时光,一个温柔了岁月。

5.宁愿独处也不要和融不进去的人待在一起,不要刻意的去维持关系让自己越来越虚伪。宁可孤独,也不违心。

6.从今天起,努力去做一个可爱的人,不羡慕谁,也不埋怨谁,在自己的道路上,欣赏自己的风景,遇见自己的幸福。

7.每个人心底都有那么一个人,已不是恋人,也成不了朋友。时间过去,无关乎喜不喜欢,总会很习惯的想起你。然后希望你一切都好。

8.时间,让深的东西越来越深,让浅的东西越来越浅。缘起,则聚,缘灭,则散。

9.所谓成熟,就是,你要习惯任何人的忽冷忽热,也要看淡任何人的渐行渐远。

10.给时间一点时间,让过去过去,让开始开始。让你难过的事情,有一天,你一定会笑着说出来。

11.人在的时候,以为来日方长什么都有机会,其实人生是减法,见一面,少一面。

12.刻意去找的东西,往往是找不到的。天下万物的来和去,都有他的时间。——三毛

13.越长大越觉得,比起诉说自己的委屈与不甘,沉默最好。反正,你信你的,我活我的。

14.世界上最远的距离,不是爱,不是恨,而是熟悉的人,渐渐变得陌生。

15.要记住,无论我们最后生疏到什么样子,曾经对你的好都是真的。

16.时间会告诉我们,简单的喜欢,最长远;平凡中的陪伴,最心安;懂你的人,最温暖。

17.执着是一种负担,放弃是一种解脱。人没有完美,幸福没有一百分,不能拥有那么多,何必要求那么多。

18.对生命而言,接纳才是最好的温柔,不论是接纳一个人的出现,还是,接纳一个人的从此不见。——秋微《莫失莫忘》

19.几乎每个人都听过“不忘初心,方得始终”,却少有人知道下一句“初心易得,始终难守”。

20.不闻不问不一定是忘记了,但一定是疏远了,彼此沉默太久就连主动都需要勇气。

21.任何东西只要足够迷惑你,就足以毁了你。心软是病,情深致命。

22.总有一些人,原本只是生命的过客,后来却成了记忆的常客。

5条大神的评论

  • avatar
    访客 2022-11-23 上午 11:03:29

    数字证书,如果是,就可以从数字证书中获取到Bob的公钥,然后进行安全的通信。同时,就像现实生活中一样,我们不管进行任何涉及到资金或者安全问题的时候,都需要出示自己的身份证,并且对方会验证你的身份证的真假,也就是说,一个持有假身份证的人,或者没有身份信息

  • avatar
    访客 2022-11-23 下午 07:58:45

    接收方无法辨别信息是真正的发送方还是黑客发送过来的,这样的加签不能辨别信息是否被篡改过。 之所以用接收方的公钥加密,是因为,如果信息被黑客拦截,需要用接收方的私钥来

  • avatar
    访客 2022-11-23 下午 08:42:27

    ),黑客也无法看到明文,只能看天书?了。 反之,如果用发送方的私钥加密,如果信息被黑客拦截,因为发送方的公钥是公开的,黑客就可以用发送方的公钥解密密文获得明文,这样的加密所有的人都可以看到明文,不能保证信息的隐私。 了解了以上这些知识,在测试过程中就可以更加深入的了解签名的目的,进

  • avatar
    访客 2022-11-23 上午 10:50:31

    KCS5Padding" ,待加密数据使用 AESKey 加密之后做 Base64 得到加密数据。 AESKey 长度为16 位,由26个字母和数字组成。 博客原文地址: 报文加密和签名设计 数字签名和数字证书究竟是什么? 我们经常会见到

  • avatar
    访客 2022-11-23 上午 10:44:33

    的,没有被篡改,反之,则确认信息被破坏了。 似乎现在,利用公钥和私钥以及数字签名,我们可以保证信息传输过程中的私密性和完整性。但还存在一个问题,就是公钥分发的问

发表评论