美文网首页
ECDSA短信签名

ECDSA短信签名

作者: 守拙圆 | 来源:发表于2017-09-06 11:16 被阅读150次

    短信所发送的字节有限,一般为140字节左右,若对短信进行签名,会导致短信利用率降低,故短信签名的过程中,签名的长度很关键ECDSA 签名方式的在长度适中(根据加密算法位数不同而不同)的情况下,提供了很好的安全保障。另外手机短信一般不需要进行加密,因为手机一般处于移动状态,其网络变化,比较大,攻击者要截取并分析比较困难。

    手机短信安全防护重点放在:防止被人修改

    ECDSA常用签名算法

    • ECDsaP256, 其公钥长度 72 Bytes,
    • ECDsaP384,其公钥长度 104 Bytes,
    • ECDsaP521 ,其公钥长度 140 Bytes,

    其中公钥最前面的8个字节是 附加字节。附加加字节的前4字节表示 “ECS1”、“ECS3”、“ECS5” 三种类型,后4字节表示公钥长度。例如256位的 ECDsaP256 算法,前面8个字节是 0x45, 0x43, 0x53, 0x31, 0x20, 0x00, 0x00, 0x00 ,前面4个字节 0x45,0x43,0x53,0x31 表示 “ECS1” ,后面4个字节 0x20,0x00,0x00,0x00 表示公钥是256位。

    ECDsaP256签名

    签名组成

    对于ECDsaP256算法,其签名结果其实就是两个很大的整数r(random)签名s(signature),由于普通的数据类型不够,所以就用数组来表示,r和s都是32个字节的长度,总共是64个字节。

    签名方法

    一般ECDsaP256签名算法库都会提供两种签名方法:

    • 普通格式:就是两个32位整数组成的64字节串
    • ASN1格式:由ASN1编码而成的包含两个32位整数的70/71/72字节串

    ASN1编码格式说明

    ASN1将签名产生的 r 和 s 看作两个整数,若其第一个字节最高位为 1,则在整数前插入0x00。
    以下是一个ECDsaP256算法签名结果:

    byte[] signForIos = new byte[]{0x30,0x45,0x02,0x20,0x6C,0x80,0x22,0xE4,0xA5,0x89,0x8A,0x81,0xE9,0x82,0x0C,0x13,
                                   0xC6,0xE7,0x09,0x95,0xC9,0x1C,0x4F,0x00,0x32,0x13,0x59,0xB2,0x2D,0xD3,0xEF,0xE4,
                                   0x9D,0xDD,0x3B,0xAD,0x02,0x21,0x00,0xF0,0x84,0x9E,0x2E,0xB6,0x01,0x3B,0x2A,0x81,
                                   0xB0,0x36,0x83,0x51,0x7F,0x20,0x56,0xD7,0xFB,0xD6,0x9B,0x76,0x38,0x39,0xF8,0xD2,
                                   0x89,0xED,0x32,0x24,0x0D,0xA1,0x25};
    

    其中:
    第1字节:0x30表示一种通用的格式
    第2字节:0x45表示后面跟了69个字节的数据
    第3字节:0x02表示后面是一个整数
    第4字节:0x20表示整数长度是32个字节

    第35字节:0x02表示后面是个整数
    第36字节:0x21表示整数长度是33个字节
    第37字节:0x00需要忽略掉,这个是由于ASN1编码产生的,

    参考文档:使用C#验证IOS9产生的ECDSA签名


    版权声明:自由转载-非商用-非衍生-保持署名创意共享3.0许可证

    相关文章

      网友评论

          本文标题:ECDSA短信签名

          本文链接:https://www.haomeiwen.com/subject/rwwpjxtx.html