rsa算法

使用 Istio 进行 JWT 身份验证与来源限流

∥☆過路亽.° 提交于 2020-04-07 00:01:21
Istio End User Authentication Istio 支持使用 JWT 对终端用户进行身份验证,支持多种 JWT 签名算法,主流的有 RS256/ES256。(也许也会有人用 HS256 做分布式 JWT 认证。。不过这显然是非常危险的) JWK 说明 JWK 全称是 Json Web Key,它描述了一个加密密钥(公钥或私钥)的各项属性,包括密钥的值。 Istio 使用它进行 JWT 验证,因此在使用 RSA 签名算法时,JWK 里提供的应该是用于验证的公钥。 一个 RSA 公钥的数据结构如下: { "alg": "RS256", # 算法「可选参数」 "kty": "RSA", # 密钥类型 "use": "sig", # 被用于签名「可选参数」 "kid": "NjVBRjY5MDlCMUIwNzU4RTA2QzZFMDQ4QzQ2MDAyQjVDNjk1RTM2Qg", # key id,在有多个 jwk 时(如 jwks 中)被用于区分各 jwk "n": "yeNlzlub94YgerT030codqEztjfU_S6X4DbDA_iVKkjAWtYfPHDzz_sPCT1Axz6isZdf3lHpq_gYX4Sz-cbe4rjmigxUxr

非对称加密RSA算法

旧街凉风 提交于 2020-03-28 02:38:26
密码与加密 传统密码: 加密算法是秘密的现代密码系统:加密算法是公开的;秘钥是秘密的(秘钥是用来加密的) 对称加密:加密和解密使用一个秘钥 非对称加密:使用两个秘钥,一个用来加密,一个用来解密 加密的RSA是用来进行信息传输用,存数据库的密码用的hash映射,md5或者sha 非对称加密 使用两个秘钥,公钥和私钥,公钥加密私钥解密,或者私钥加密公钥解密。例如RSA加密算法,应用:https协议,Linux远程登录不用密码。 公钥:用来加密,是公开的 私钥:用来解密,是私有的 加密过程测试: 1.随机选取两个质数p和q2.计算n=pq3.选取一个与φ(n)互质的小奇数e, φ(n)=(p-1)(q-1)4.对模φ(n), 计算e的乘法逆元d,即满足(e*d) % φ(n) = 15.公钥(e, n) 私钥(d, n)6.加密过程:c=(m^e) % n7.解密过程:m=(c^d) % n p = 53 q = 59 n = p*q fai_n = (p-1)*(q-1) # 选个小奇数 e 要满足(e*d) % fai_n = 1 e = 3 # 这个d一定是唯一的,证明略,满足(e*d) % fai_n = 1 d = 2011 m = 87 print('信息:', m) print('---------公钥加密,私钥解密-------') c = (m**e) % n

RSA算法的JNI封装思路

ⅰ亾dé卋堺 提交于 2020-03-20 11:03:53
JNI(Java Native Interface)是一组API和标准,作用是实现Java和其他语言(主要是C/C++)的通信。出于运算速度等方面的考虑,一些对运算性能要求较高的算法往往是基于C/C++语言(与硬件关联性更强)实现的。如果应用程序需要基于JAVA编程实现时,这就会有一些矛盾。此时,通过JNI技术,Java开发者可以在不了解算法内容的情况下,方便快捷的使用C/C++加密算法的动态库,实现跨语言调用。例如有如下的应用场景:嵌入式终端要基于RSA非对称算法完成与服务器之间的身份认证。终端通过加入加密芯片,可以快速安全实现基于RSA算法的签名验签工作,但是服务器端往往不会外加加密模块,往往会基于Openssl等开源库来移植RSA算法,进而实现高效运算的目的。这些库源码大多基于C语言实现,此时Java开发者就可以借助JNI技术来封装实现签名等功能。 封装步骤如下: 1、使用java编译器生成调用RSA 加解密,签名验签的API头文件。 2、根据生成的头文件和RSA的C源码库开源库,生成一个供JNI接口调用的静态库 3、在JAVA源码中使用Native方法引入动态库的API,编译java程序 最终生成的文件结构如下图: 注意事项: 1、Java数据类型和本地数据类型需要做适当的转换,对应关系如下表: 2、若在windows下直接使用命令行的形式,注意JDK的版本

前端加解密方案探讨

假装没事ソ 提交于 2020-03-12 05:58:50
最近在做一个node项目,需要对前端传递给node端的敏感数据进行加密,并在node端对该加密数据进行解密;因为在做node项目之前,与后端配合开发过类似的需求,即前端加密后端解密;所以就尝试采用RSA非对称加密算法来实现。由于第一次采用RSA来完成加解密的整个过程,遇到了不少坑;不过由于种种原因,最后采用了AES的加密方式;下面就来说说前端加解密实现方案。 RSA加解密算法 实现思路 当然首先想到采用的加解密算法就是 RSA ,其关键在于算法的 公钥/秘钥 。其主要用法: 算法生成一份公钥和私钥,其中公钥是公开的,所有人都可以知道,私钥是保密的 用公钥解密,要用私钥解密 于是,基于RSA算法来实现加解密,找到了对应的浏览器端库 jsencrypt 和node端的库 node-rsa 来实现具体的功能。 具体实现思路: 使用 jsencrypt 在前端实现用公玥加密,使用 node-rsa 在node端用私钥解密。 遇到的坑 由于采用的是RSA算法,所以需要前后端约定具体的公钥和私钥。怎么生存公钥私钥呢? 于是根据 jsencrypt 库的介绍,使用 openssl 方式来生成对应的公钥和私钥。于是生成的公钥和私钥大概是如下样子: // 私钥 -----BEGIN RSA PRIVATE KEY-----

黑马程序员数据加密学习

孤街浪徒 提交于 2020-03-04 12:14:32
---------------------- Windows Phone 7手机开发 、 .Net培训 、期待与您交流! ---------------------- 对称加密算法: 对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解密,所以密钥的保密性对通信性至关重要。 对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。 非对称加密算法: 非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称密码体制的特点: 算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快

使用ssh公钥实现免密码登录

佐手、 提交于 2020-03-01 05:07:44
ssh 无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对,下面我以CentOS为例。 有机器A(192.168.1.155),B(192.168.1.181)。现想A通过ssh免密码登录到B。 首先以root账户登陆为例。 1.在A机下生成公钥/私钥对。 [root @A ~ ]# ssh - keygen - t rsa - P '' -P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车。 该命令将在/root/.ssh目录下面产生一对密钥id_rsa和id_rsa.pub。 一般采用的ssh的rsa密钥: id_rsa 私钥 id_rsa.pub 公钥 下述命令产生不同类型的密钥 ssh-keygen -t dsa ssh-keygen -t rsa ssh-keygen -t rsa1 2.把A机下的/root/.ssh/id_rsa.pub 复制到B机的 /root/.ssh/authorized_keys文件里,先要在B机上创建好 /root/.ssh 这个目录,用scp复制。 [root@A ~ ]# scp /root/.ssh/id_rsa.pub root@ 192.168.1.181 :/root/.ssh/authorized_keys root@ 192.168 . 1.181 '

一节课详解SSH协议

蓝咒 提交于 2020-02-25 19:00:44
SSH介绍  Telnet缺少安全的认证方式,而且传输过程采用TCP进行明文传输,存在很大的安全隐患。单纯提供Telnet服务容易招致DoS(Deny of Service)、主机IP地址欺骗、路由欺骗等恶意***。  随着人们对网络安全的重视,传统的Telnet和FTP通过明文传送密码和数据的方式,已经慢慢不被人接受。SSH(Secure Shell)是一个网络安全协议,通过对网络数据的加密,解决了这个问题。它在一个不安全的网络环境中,提供了安全的远程登录和其他安全网络服务。  SSH通过TCP进行数据交互,它在TCP之上构建了一个安全的通道。另外SSH服务除了支持标准端口22外,还支持其他服务端口,以防止受到非法***。 注意: SSH协议包括SSH1.0,SSH1.5,SSH2.0 SSH的功能 SSH支持的客户端功能  SSH客户端功能允许用户与支持SSH Server的路由器、UNIX主机等建立SSH连接 SFTP  SFTP(SSH File Transfer Protocol)是SSH FTP的简称,是一种安全的FTP。SFTP建立在SSH连接的基础之上,远程用户可以安全地登录设备,进行文件管理和文件传送等操作,为数据传输提供了更高的安全保障。同时,由于设备提供了SFTP客户端功能,可以从本设备安全登录到远程SSH服务器上,进行文件的安全传输。

RSA算法及Fault Injection攻击数学原理

谁说我不能喝 提交于 2020-02-13 13:22:40
what RSA算法是什么以及实现原理,这个不需要我也轮不到我来讲,比较深入浅出的是阮一峰的两篇《RSA算法原理》博客,大家去谷他一歌即可。 本文需要读者了解非对称加密的概念。 本文提到RSA算法主要是为了讲Fault Injection(以下简称FI)攻击的数学原理,而 讲解FI的数学原理又必须要牵涉到RSA算法的数学原理 。实际上,FI攻击不仅可以针对RSA加密算法,也可以针对其他加密算法,不过RSA加密算法的数学原理相对容易理解,相应的FI攻击的数学原理也相对容易理解,所以挑选RSA算法及其对应的FI攻击原理来展开本文。 作为一篇马桶上读物,本文不会牵涉到艰深晦涩的数学公式推导及证明,因为主要一方面是我不会,另一方面本人自从若干年前丧失数学能力之后,一直对那些满篇数学公式猛推如虎的文章深恶痛绝,感到智商受到万吨伤害之余也忍不住想骂一句《大话西游》里的台词:”一天到晚就知道哦哦哦,完全不管人家受得了受不了“。 因此本文不可避免会牵涉一定的数学公式,但我保证都是高中数学范畴,且会用最通俗化的语言解释what、how以及why。 how 假设有两人S(sender)以及R(receiver),S想要通过RSA算法来加密自己的信息发送给R,具体应该怎么做呢? 对于R来说(注意, 这里是接收者的公钥及私钥计算过程,而不是想当然的发送者的公钥及私钥计算过程 ): 第一步

【密码学】RSA算法原理

£可爱£侵袭症+ 提交于 2020-02-13 07:51:43
RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对 密钥 ,使用其中一个加密,则需要用另一个才能解密。 RSA的算法涉及三个参数,n、e1、e2。 其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。 e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1) 互质 ;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。 (n,e1),(n,e2)就是密钥对。其中(n,e1)为 公钥 ,(n,e2)为私钥。[1] RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e2 mod n;B=A^e1 mod n;(公钥加密体制中,一般用公钥加密,私钥解密) e1和e2可以互换使用,即: A=B^e1 mod n;B=A^e2 mod n; 来源: https://www.cnblogs.com/qiuxiangmuyu/p/6491761.html

RSA算法原理(二)

只谈情不闲聊 提交于 2020-02-07 09:03:11
转载: http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html 上一次,我介绍了一些 数论知识 。 有了这些知识,我们就可以看懂 RSA算法 。这是目前地球上最重要的加密算法。 六、密钥生成的步骤 我们通过一个例子,来理解RSA算法。假设 爱丽丝 要与鲍勃进行加密通信,她该怎么生成公钥和私钥呢? 第一步,随机选择两个不相等的质数p和q。 爱丽丝选择了61和53。(实际应用中,这两个质数越大,就越难破解。) 第二步,计算p和q的乘积n。 爱丽丝就把61和53相乘。   n = 61×53 = 3233 n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。 第三步,计算n的欧拉函数φ(n)。 根据公式:   φ(n) = (p-1)(q-1) 爱丽丝算出φ(3233)等于60×52,即3120。 第四步,随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。 爱丽丝就在1到3120之间,随机选择了17。(实际应用中,常常选择65537。) 第五步,计算e对于φ(n)的模反元素d。 所谓 "模反元素" 就是指有一个整数d,可以使得ed被φ(n)除的余数为1。   ed ≡ 1