非对称加密&&RAS算法

非对称加密&&RAS算法

之前对非对称加密有很大的误解,可以说之前理解的非对称加密都是错误的,经过一位大牛的点拨 (碾压) 充分认识到了自己的错误~,现在重新对非对称加密做一个总结;

之前错误的想法

非对称加密 指的是 传输信息时 拥有公钥/私钥,公钥加密的信息只能使用私钥解密,私钥加密的信息只有公钥能解密~ 仅此而已;

但这是错误的,这是非对称加密的必要条件;但不是充分必要条件;

现阶段我认为的非对称加密

在上面介绍的继续做补充;

非对称加密的通信方式是单向的~
小明对小红发送信息如果小明要保密,小明就必须使用小红的公钥上锁加密.
如果小红对小明发信息使用了小红自己的私钥加密,那么小红发送的信息就可以用公钥解开,但由于公钥是公开的,所以任何人都可以解开,因此
如果小红想要保密的发送信息给小明,应该使用小明的公钥加密给小红;

双方互相通信流程图

不仅如此,公钥和私钥的关系应该有着这样一个关系:,公钥无法反向推测出私钥(合理时间内);甚至哪怕你的算法源码以及泄露出去,也无法在合理时间内反向破解私钥;

这里有比较成熟的加密算法: RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。
其中使用最多的是 RSA 加密算法;

下面谈一谈我对RSA算法的理解;

RSA算法理解学习

预备知识

  • 关于求余的几个公式恒等式
    1. (a+b)\%p=(a\%p + b\%p)\%p
    2. (a-b)\%p=(a\%p - b\%p + p)\%p
    3. (a*b)\%p=(a\%p * b\%p + p)\%p
  • 模逆元
    如果有正整数 n , m ,e 有以下关系恒成立
    (m*n)\%e≡1
    那么我们称 mn 互为关于 e的模逆元;
  • 欧拉函数 wiki百科
    小于或等于n的正整数中与n互质的数的数目φ(n)函数的作用;
    例如:
    φ(8) = 4; // 与8互质的数有:1,3,5,7
  • 欧拉-费马定理
    对于任何非负整数 a 存在以下恒等关系
    a^{φ(n)}\%n≡1

过程概述

  1. 随机选取两个质数 p ,q
  2. N = p * q
  3. r = φ(N)
  4. 随机选取一个数字 e 满足 e<r && e 与 r 互质
  5. 求得 e关于 r 的模逆元 d
    及存在以下关系
    (e·d) \%r = 1
  6. 此时集合 {e,N}作为公钥分发公开, {d,N}作为私钥自己保存
  7. 加密过程:
    现加密传输一个小于N的非负整数 m:
    n=m^e\%N
    得到 密文 n;
  8. 解密过程:
  9. 得到密文 n:
    m=n^d\%N
    得到 原始信息m;
  10. 所有的数据信息都可以转化为Unicode 或者 ascii 码进行传输,重复上述 7加密过程后发送密文即可实现加密传输;

数学解析

首先证明下列两公式成立:
n=m^e\%N
m=n^d\%N

  1. 将1代入到2得:
    m=(m^e\%N)^d\%N
  2. 展开使用乘法表示:
    m=[(m^e\%N)*(m^e\%N)*···*(m^e\%N)]\%N
  3. 根据求余恒等公式3得:
    m=[m^e*m^e*···*m^e]\%N=(m^e)^d\%N
  4. 因为 (e*d)%r = 1 && r = φ(N) 得到:(k为系数 关系为: (ed)%r = k 余 1))
    m=m^{(k*r+1)}\%N=(m^{k*φ(N)+1})\%N = (m*m^{k*φ(N)})\%N= (m*(m^{φ(N)})^k)\%N
  5. 展开可得:
    m=\{m\%N*[(m^{φ(N)}\%N*m^{φ(N)}\%N*...*m^{φ(N)}\%N)]\%N\}\%N
  6. 由欧拉-费马定理
    m^{φ(N)}\%N≡1
    代入后可得
    m=[m\%N*(1*1*...*1)\%N]\%N=(m\%N*1\%N)\%N=m\%N
    这里发出一个问题:欧拉费马定理指出当m与N互质时公式成立,但是这里m有可能不与N互质,但是等式仍然成立~为什么?特殊的某个值在哪里不成立导致了这一条件?
  7. 因为 m < N
    m≡m%N得证;

代码求解

//获取公钥 私钥 (即上文中互为模逆元的 e && d)
bool getKey(unsigned int * pb,unsigned int* pv,unsigned int modNum)
{
    *pb = modNum;
    while(judgeRelativelyPrime(*pb,modNum) == false)
    {    
        *pb = getRandPrimeNum(modNum);        //在1~modNum中随机返回一个质数
        if(*pb == -1u)  return false;    
    }
    int k = 0;
    for(;(k*modNum+1)%e !=0;k++)
    {
    }
    if ((k*modNum + 1) % e == 0)
    *pv = (k*modNum + 1) / e; 
    retrun true;
}
//加密
unsigned int encryption(unsigned int bigNum,unsigned int pb,unsigned int byt)
{
    return ((unsigned int)pow(byt,pb)) % bigNum;
}

//解密
unsigned int decryption(unsigned int bigNum,unsigned int pv,unsigned int ecp)
{
    return ((unsigned int)pow(byt,pv)) % bigNum;
}

注意事项!

这里的函数只能作为示例,因为现有的RSA算法都是基于大数质数的计算进行加密保护,正是由于此,哪怕知道公钥和算法源码别人也无法咋合理的时间内破解秘钥~
因此需要将 unsigned int 更换为支持超大数据的类型,同时实现大数的加减乘除以及求余即可~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容