最近在研究fabric的加密源代码时,发现其默认的加密函数选择的是secp256r1(P256),这是基于go的官方补充包的实现。 这条曲线有一个兄弟,secp256r1。注意倒数第二个位置的 “r” 而不是 “k”。两者都在SEC 2中定义:推荐的椭圆曲线域参数。
) - C | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A | TLS_RSA_WITH_AES_128_CBC_SHA (rsa 2048) - A | TLS_RSA_WITH_AES_256_CBC_SHA ) - A | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (secp256r1) - A | TLS_ECDHE_RSA_WITH_RC4_128 _SHA (secp256r1) - C | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES _256_CBC_SHA (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) - A | TLS_ECDHE_RSA_WITH_AES
Certificates MUST be signed with ECDSA using secp256r1, and the signature MUST use SHA-256. The curve secp256r1 MUST be supported [RFC4492]; this curve is equivalent to the NIST P-256 curve. 即,证书包括SubjectPublicKeyInfo,其指示具有namedCurves secp256r1 [RFC5480]的id-ecPublicKey的算法; 公钥格式是未压缩的[RFC5480] 证书务必使用secp256r1使用ECDSA进行签名,签名必须使用SHA-256。 使用的密钥必须是ECDSA的能力。 曲线secp256r1务必支持[RFC4492]; 这条曲线相当于NIST P-256曲线。 散列算法是SHA-256。
这就要从其发展历史来看,从前几篇的介绍,我们可以知道,爱德华曲线族的研究比较晚,在爱德华数字签名体制出现之前,已经有了椭圆曲线签名 EcDSA 机制,基于 Weierstrass 曲线, 代表性的是 secp256r1 能够避免随机数引发的安全问题; 无分支和秘密数据索引操作,对于侧信道攻击等具有更好的免疫效果; 公钥和签名值都较小 (Ed25519 公钥为 32 个字节, 签名值为 64 字节),【注:这一点其实不明显,和 secp256r1
) A | TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (secp256r1) A | TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 _SHA256 (secp256r1) A | compressors: | NULL | cipher preference: client | warnings: | Key exchange (dh 2048) of lower strength than certificate key | Key exchange (secp256r1 _SHA256 (secp256r1) A | compressors: | NULL | cipher preference: client | warnings: | Key exchange (dh 2048) of lower strength than certificate key | Key exchange (secp256r1
测试用例应该包括两条不同的椭圆曲线,即secp256k1和secp256r1。在OpenJDK里,前者利用系统本地实现,后者为纯Java实现。
secp256r1密钥对生成有bug但我无法弄清楚原因。从cleos创建的单元测试创建密钥--r1不会通过。 你可能不会将secp256r1视为一个选项,因为cleos wallet命令也无法导入这些键。
" eet rsa verify -e pem -f my_rsa_public.pem -i "message to sign" -s "<signature>" 4.2 ECC(椭圆曲线) 支持 SECP256R1 # 生成 ECC 密钥对 eet ecc generate -f my_ecc -c secp256r1 # ECDH 密钥交换(-k 己方私钥,-b 对方公钥) eet ecc ecdh -k alice_private.pem -b bob_public.pem # ECDSA 签名与验签 eet ecc sign -f my_ecc_private.pem -i "data" -c secp256r1 eet ecc verify -f my_ecc_public.pem -i "data" -s "<signature>" -c secp256r1 4.3 SM2(国密非对称) 支持加密/解密、签名/验签,以及多种密文与签名格式
在使用ECC进行数字签名的时候,需要构造一条曲线,也可以选择标准曲线,例如:prime256v1、secp256r1、nistp256、secp256k1(比特币中使用了该曲线)等等 1.4、ECDSA
一般而言,椭圆曲线被分为两类,“伪随机曲线”和Koblitz曲线,NSA在椭圆曲线签名算法中提出的secp256r1是随机参数: 这个随机参数来自于一个种子,但是这个种子怎么来的,为何这个种子不是一个单纯的数字 因此绝大多数区块链都没有选择这条曲线,而是选择了Koblitz曲线,secp256k1(a=0,b=7),如果传闻为真,如果NSA掌握了secp256r1的弱化方法,那么区块链的曲线参数的选择使他们躲过了
Supported Groups (6 groups) Supported Group: x25519 (0x001d) Supported Group: secp256r1 Key Share Length: 105 Key Share Entry: Group: x25519 Key Share Entry: Group: secp256r1
c)Fabric目前涉及到的加密算法 HASH算法,目前用到的是SHA2-256,对应到国密算法可以用SM3 非对称加密算法,椭圆曲线(ECC),目前用到的是secp256r1, 对应到国密算法可以用SM2
the curves list 00 1d - assigned value for the curve "x25519" 00 17 - assigned value for the curve "secp256r1 following list of algorithms 04 01 - assigned value for RSA/PKCS1/SHA256 04 03 - assigned value for ECDSA/SECP256r1
使用以下命令生成 CSR(Certificate Signing Request,证书签名请求)文件并提交给提供商,就可以获得 ECC 证书: openssl ecparam -genkey -name secp256r1 | openssl ec -out ecc.key openssl req -new -key ecc.key -out ecc.csr 以上命令中可供选择的算法有 secp256r1 和 secp384r1
(更新:这是关于secp256k1的姐妹曲线的另一篇文章,secp256r1,另一条曲线模数为256位素数,但结构不同。) 基点 接下来,我们 在椭圆曲线上选择一个基点g。
使用以下命令生成 CSR(Certificate Signing Request,证书签名请求)文件并提交给提供商,就可以获得 ECC 证书: openssl ecparam -genkey -name secp256r1 | openssl ec -out ecc.key openssl req -new -key ecc.key -out ecc.csr 以上命令中可以选择的算法有 secp256r1 和 secp384r1
Connector> //JDK keytool 自建证书要使用EC加密类型,不要RSA keytool -genkeypair -alias myecccert -keyalg EC -groupname secp256r1
extended_master_secret empty renegotiation_info 00 supported_groups grease [0xdada], x25519 [0x1d], secp256r1
secp256k1和secp256r1是两种椭圆曲线数学模型,均属于公钥生成算法。 私钥生成公钥的算法也即ECC的字面含义椭圆曲线,是通过该数学模型生成的一种正向快速逆向困难的算法,目前这个算法包括secp256k1和secp256r1 ,secp256k1是比特币首先使用的,而secp256r1 据说更有优势,但也有被爆漏洞的历史,由于比特币没有使用secp256r1,因此还有“比特币躲过secp256r1子弹”的说法。
as the node TLS keys, must follow one of the following schemes: ECDSA using the NIST P-256 curve (secp256r1