最近在导师的要求下接手了基于欧洲标准的车联网项目中的安全层,需要学习密码学,以及网络安全的相关内容,这里做一个总结

引用的大部分内容为一个西安的大佬(哈哈我老家也是西安的),大佬主页:https://my.csdn.net/qq_30866297

正文:

关于椭圆曲线的基础知识这里不讲,网上很多,下面记录一下重点

一:椭圆曲线上的简单加密/解密

公开密钥算法总是要基于一个数学上的难题。比如RSA 依据的是:给定两个素数p、q 很容易相乘得到n,而对n进行因式分解却相对困难。那椭圆曲线上有什么难题呢?

考虑如下等式:

K=kG [其中 K,G为Ep(a,b)上的点,k为小于n(n是点G的阶)的整数]

不难发现,给定k和G,根据加法法则,计算K很容易;但给定K和G,求k就相对困难了。

这就是椭圆曲线加密算法采用的难题。我们把点G称为基点(base point),k(k<n,n为基点G的阶)称为私有密钥(privte key),K称为公开密钥(public key)。

现在我们描述一个利用椭圆曲线进行加密通信的过程:

1、用户A选定一条椭圆曲线Ep(a,b),并取椭圆曲线上一点,作为基点G。

2、用户A选择一个私有密钥k,并生成公开密钥K=kG。

3、用户A将Ep(a,b)和点K,G传给用户B。

4、用户B接到信息后 ,将待传输的明文编码到Ep(a,b)上一点M(编码方法很多,这里不作讨论),并产生一个随机整数r(r<n)。

5、用户B计算点C1=M+rK;C2=rG。

6、用户B将C1、C2传给用户A。

7、用户A接到信息后,计算C1-kC2,结果就是点M。因为

C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M

再对点M进行解码就可以得到明文。

在这个加密通信中,如果有一个偷窥者H ,他只能看到Ep(a,b)、K、G、C1、C2 而通过K、G 求k 或通过C2、G求r 都是相对困难的。因此,H无法得到A、B间传送的明文信息。

密码学中,描述一条Fp上的椭圆曲线,常用到六个参量:

T=(p,a,b,G,n,h)。

p 、a 、b 用来确定一条椭圆曲线,

G为基点,

n为点G的阶,

h 是椭圆曲线上所有点的个数m与n相除的整数部分

这几个参量取值的选择,直接影响了加密的安全性。参量值一般要求满足以下几个条件:

1、p 当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求;

2、p≠n×h;

3、pt≠1 (mod n),1≤t<20;

4、4a3+27b2≠0 (mod p);

5、n 为素数;

6、h≤4。

二:密钥交换算法(Diffie-Hellman)

我做的这个项目貌似要用Diffie-Hellman密钥交换算法,相关的算法还有RS等,这里一起介绍了吧

使用对称加密算法时,密钥交换是个大难题,所以Diffie和Hellman提出了著名的Diffie-Hellman密钥交换算法。

Diffie-Hellman密钥交换算法原理:

Alice与Bob确定两个大素数n和g,这两个数不用保密

Alice选择另一个大随机数x,并计算A如下:A=gx mod n

Alice将A发给Bob

Bob 选择另一个大随机数y,并计算B如下:B=gy mod n

Bob将B发给Alice

计算秘密密钥K1如下:K1=Bx mod n

计算秘密密钥K2如下:K2=Ay mod n

理论上K1=K2,因此Alice和Bob可以用其进行加解密

RSA加密算法是基于这样的数学事实:两个大素数相乘容易,而对得到的乘积求因子则很难。加密过程如下:

(1)选择两个大素数P、Q

(2)计算N=P*Q

(3)选择一个公钥(加密密钥)E,使其不是(P-1)与(Q-1)的因子

(4)选择私钥(解密密钥)D,满足:(D*E) mod (P-1)(Q-1)=1

(5)加密时,明文PT计算密文CT:CT=PTE mod N

(6)解密时,从密文CT计算明文PT:PT=CTDmodN

这篇文章就总结到这里,后面引用http://blog.sciencenet.cn/home.php?mod=space&uid=223843&do=blog&id=452565本文来自文勇刚科学网博客。

指导我接下来毕设的论文写作思路:

个人分类: 安全层实现

椭圆曲线加密和rsa对比的更多相关文章

  1. go加密算法:非对称加密(一)--RSA

    椭圆曲线加密__http://blog.51cto.com/11821908/2057726 // MyRas.go package main import ( "crypto/rand&q ...

  2. 非对称加密技术- RSA算法数学原理分析

    非对称加密技术,在现在网络中,有非常广泛应用.加密技术更是数字货币的基础. 所谓非对称,就是指该算法需要一对密钥,使用其中一个(公钥)加密,则需要用另一个(私钥)才能解密. 但是对于其原理大部分同学应 ...

  3. 信息安全-加密:RSA 算法

    ylbtech-信息安全-加密:RSA 算法 RSA公开密钥密码体制.所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制. 1.返 ...

  4. 加密算法(对称加密)AES、DES (非对称加密)RSA、DSA

    目前主流的加密方式有:(对称加密)AES.DES        (非对称加密)RSA.DSA

  5. openssl 非对称加密DSA,RSA区别与使用介绍(转)

    openssl 非对称加密DSA,RSA区别与使用介绍(转) 博客分类: OS.Linux Security   在日常系统管理工作中,需要作一些加解密的工作,通过openssl工具包就能完成我们很多 ...

  6. php/js/linux: js加密(rsa公钥加密) php解密(rsa私钥解密)

    php/js/linux: js加密(rsa公钥加密) php解密(rsa私钥解密) 一: js rsa 插件 https://github.com/UFO0001/WX_RSA 或者: https: ...

  7. android md5加密与rsa加解密实现代码

    import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security. ...

  8. 【加密】RSA加密之实现

    private void btn_RSA_Click(object sender, EventArgs e) { //第一种方法调用 this.textBox1.Text = RSAEncrypt(& ...

  9. 【加密】RSA加密之算法

    RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的. RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥, ...

随机推荐

  1. c# base new 等关键字基础

    base关键字 不仅可以  调用父类的 实例方法,也能狗调用父类的 构造方法 https://www.cnblogs.com/aehyok/p/3519599.html

  2. python同时遍历数组的索引和元素

    1.一般要同时遍历数组的索引和元素需要先确定数组的长度length(元素个数),然后使用range函数来生成数组的索引,最后使用该索引来访问数组的元素. 具体做法如下: l = [2,7,11,15] ...

  3. MyBatis的优缺点以及特点

    特点: mybatis是一种持久层框架,也属于ORM映射.前身是ibatis. 相比于hibernatehibernate为全自动化,配置文件书写之后不需要书写sql语句,但是欠缺灵活,很多时候需要优 ...

  4. 友盟分享小结 - iOS

    因之前都写在了 AppDelegate 类中,看起来过于臃肿,此次基于友盟分享重新进行了一次优化,此次分享内容基于已经成功集成 SDK 后 code 层级部分.注:此次分享基于 SDK 6.9.3,若 ...

  5. 虚拟dom和真实dom的转化和class解析的顺序

    昨天出去溜了一圈,被问到几个问题回来整理了一下,当被特意问到一看感觉就会的问题,千万要不要急于回答,先想想,因为这往往是一个被忽略的坑(例如class解析顺序)!!! 1.写出虚拟dom和真实dom之 ...

  6. JAVA / MySql 编程——第八章 DAO 模式

    1.        数据持久化:将程序中的数据在瞬时状态和持久状态间转换的机制即为数据持久化: 2.        持久化的实现方式:数据库.普通文件.XML文件: 3.        JDBC封装: ...

  7. Ansible学习 Patterns

    Ansible中ad-hoc命令格式如下:ansible <pattern_goes_here> -m <module_name> -a <arguments>,P ...

  8. Python面向对象--高级(二)

    ## 使用__slots__限制类的属性 - 之前说到,可以通过在类外部实例或者类名任意定义实例属性或者类属性或者方法 class Person(object): pass Person.name = ...

  9. Apache2服务配置ubuntu16.04+django1.11

    话不多说直接上步骤 环境 Ubuntu 16.04 Python 3.5.2 Django 1.11 Apache 2.4 1.Apache2安装 sudo apt-get install apach ...

  10. caioj:1348: [NOIP普及组2012]质因数分解 C++

    题目描述 已知正整数n是两个不同的质数的乘积,试求出两者中较大的那个质数. 输入样例 21 输出样例 7 输入 输入只有一行,包含一个正整数n. 输出 输出只有一行,包含一个正整数p,即较大的那个质数 ...