公钥算法

揭开HTTPS的神秘面纱

走远了吗. 提交于 2019-12-03 11:19:51
摘自: https://www.cnblogs.com/hujingnb/p/11789728.html 揭开HTTPS的神秘面纱 在说HTTP前,一定要先介绍一下HTTP,这家伙应该不用过多说明了,大家每天都在用,每一次HTTP请求,都是一次TCP连接。遗憾的是,请求的内容在TCP报文中是明文传输的,任何人截取到请求都可以读取其中的内容,很尴尬。 数据加密 为了防止请求内容被人窃取,在网络传输的路上我们做不了手脚,那就只能对传输的数据报文上做手脚了。对报文内容进行加密就是其中的一种方法。 有一种加密算法叫做对称加密算法,即加密和解密使用同一个秘钥,使用这种算法对请求数据进行加密,中间人因为没有秘钥,无法读取其中的内容。但是,使用这种算法进行加密,肯定要同意秘钥,那秘钥在网络中传输同样存在被窃取的风险啊。 这时,出现了新的加密算法:非对称加密算法,它有两把钥匙,一把叫私钥,是只有自己知道的,另一个叫公钥,可以发到互联网山,随便谁都可以看到,也就是说,传输过程中即使被别人看到也无所谓。这时,A向B发消息时,可以先用B的公钥对数据进行加密,B收到消息后再使用自己的私钥进行解密,中间即使被窃取了,因为没有对应的秘钥,也无法对了数据进行解密。 但是,非对称加密算法要比对称加密算法慢上许多。一个折中的办法,先使用非对称加密算法来传输对称加密的秘钥,以确保秘钥安全送达

加密和安全

易管家 提交于 2019-12-03 10:18:04
墨菲定律 墨菲定律:一种心理学效应,是由爱德华·墨菲(Edward A. Murphy)提出的, 原话:如果有两种或两种以上的方式去做某件事情,而其中一种选择方式将导 致灾难,则必定有人会做出这种选择 主要内容: 任何事都没有表面看起来那么简单 所有的事都会比你预计的时间长 会出错的事总会出错 如果你担心某种情况发生,那么它就更有可能发生 安全机制 信息安全防护的目标 保密性 Confidentiality 完整性 Integrity:数据确定完好,不能被篡改 可用性 Usability:read5(高可用性)系统的总体运行时间占全部时间的百分比,百分比越 高,可用性越高,百分比按年计算,%99.9 当机10小时 可控制性Controlability 不可否认性 Non-repudiation 安全防护环节 物理安全:各种设备/主机、机房环境 系统安全:主机或设备的操作系统 应用安全:各种网络服务、应用程序 (文件共享) 网络安全:对网络访问的控制、防火墙规则(iptables -vnL iptables -F) 数据安全:信息的备份与恢复、加密解密 管理安全:各种保障性的规范、流程、方法 安全攻击: STRIDE 1 Spoofing 假冒 (钓鱼网站,可以通过看域名辨别) 2 Tampering 篡改 (发邮件给tom mail -s test tom .或者ctrl

Linux 实现ssh基于key认证

走远了吗. 提交于 2019-12-03 07:38:45
  众所周知ssh是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,它默认工作在tcp的22号端口,具体实现的软件有:openssh(centos默认安装的),dropbear。ssh协议目前有两个版本v1和v2,v1基于CRC-32做MAC,不安全。v2基于DH算法做密钥交换,基于RSA或DSA实现身份认证。所以目前大多流行的Linux都是使用的V2版本。   简单了解了下ssh,我们再来说说他的两种用户登录认证,第一种基于用户名口令的方式,这个方式大家都应该知道,就是我们要想登录Linux,必须要输入相应的用户名口令才可以登录到远程Linux系统,这种方式是交互式方式登录。第二种就是我们今天要说的基于key的方式认知登录。   首先我们来了解下ssh加密通讯的过程   从上图可以看到,客户端上必须存在一对密钥对,我们都知道密钥是成对出现,况且用A的公钥加密只有A的私钥才可以解密。正是因为非对称加密的这个特性,我们不难理解ssh通信也是利用这个特性来确定数据安全的。在服务端也有一对公钥和私钥,它存在的目的也是为了加密和解密数据。ssh加密通讯的流程大致上这样的,客户端要和服务端加密通信,首先客户端需要拿到服务端的公钥,拿到服务端的公钥后,就可以用服务端的公钥对要发送到数据加密,然后发送到服务端,服务端收到这个密文的数据,它会用自己的私钥去解密

RSA前台加密后台解密的应用

谁说胖子不能爱 提交于 2019-12-03 07:31:25
写在前面 安全测试需要, 要修改一下登录时密码传输逻辑, 保证密码传输保密性和完整性以及新增用户保存用户密码时存储保密性及完整性, 以下是测试方提供的思路: 关于传输保密性及完整性 前台js代码(关键代码已加粗), 关于数据进行RSA加密部分详细可参考: RSA前台加密后台解密的应用 var data = $(":input").each(function() { if (this.name == 'password') { //只加密密码 //获取公钥系数 var modulus = $('#hid_modulus').val(); //获取公钥指数 var exponent = $('#hid_exponent').val(); //获取最终公钥 var key = RSAUtils.getKeyPair(exponent, '', modulus); //获取需加密的值(口令) var passwordVal = $("#" + this.name).val(); //将口令md5 var hexMd5 = hex_md5(passwordVal); //生成uuid var uuid = guid(); //合并口令+md5(口令)+uuid passwordVal = passwordVal + hexMd5 + uuid;//进行数据加密 var ap =

RSA前台加密后台解密的应用

扶醉桌前 提交于 2019-12-03 07:25:36
写在前面 安全测试需要, 为防止后台响应数据返给前台过程中被篡改前台再拿被篡改后的数据进行接下来的操作影响正常业务, 决定采用RSA对响应数据进行签名和验签, 于是有了这篇<RSA后台签名前台验签的应用>. 我这里所谓的返给前台的数据只是想加密用户验证通过与否的字段success是true还是false, 前台拿这个success作为判断依据进行下一步的操作, 是进一步向后台发起请求还是直接弹出错误消息.照测试结果看这是个逻辑漏洞, 即使后台返回的是false, 在返回前台的过程中响应包被劫获, 将false改为true, 这样的操作也是能做到的(BurpSuit). 所以后台响应数据尽量不要再二次使用. 那既然能篡改, 如何防止流氓篡改呢? 说一下整体思路: 首先生成密钥对, 私钥存放在后台用于签名, 公钥存放在前台用于验签. 所谓签名就是指拿明文+私钥生成的 签名结果 , 返回数据给前台时将 明文+签名结果 一并返给前台, 前台用 公钥+接收到的明文+签名结果 进行验签, 这样即使响应包被劫获, 篡改明文后, 验证签名时也不会验证通过, 从而达到响应数据防篡改的目的. 接下来说一下具体步骤. 正文(具体步骤) 1.在线生成密钥对 采用在线工具生成密钥对, 私钥密码可填可不填, 网址: http://web.chacuo.net/netrsakeypair 生成密钥对备用. 2

公钥、私钥和数字签名的理解

夙愿已清 提交于 2019-12-03 06:54:31
/*--> */ /*--> */ 总的来说: 私钥来加密数据可以确定发送方的消息。 用公钥加密数据,只有使用自己的私钥才能看到数据,这样就保护了数据。 实例说明: 1代表我的公钥, 2代表我的私钥, 公钥与私钥是成对的,它们互相解密。 1.公钥加密 PeopleA用我的公钥 1来加密数据 a,将加密后的数据 b传递给我,只有我能够使用我的私钥 2将 b再恢复称 a,而其他人不知道我的私钥,所以 PeopleA与我之间就可以传输加密的数据,保护了数据。 RSA 算法是一种十分有效的公钥加密算法 2.私钥签名 我使用我的私钥 2加密了数据 a(只有我可以使用我的私钥),只有知道了我的公钥的人才能解密,能够确定这个数据是我发的 使用私钥来加密数据,用途就是数字签名 3.举栗 比如有两个用户 Alice和 Bob, Alice想把一段明文通过双钥加密的技术发送给 Bob, Bob有一对公钥和私钥,那么加密解密的过程如下: Bob将他的公开密钥传送给 Alice。 Alice用 Bob的公开密钥加密她的消息,然后传送给 Bob。 Bob用他的私人密钥解密 Alice的消息。 加深理解: 使用公钥与私钥的目的: 1. 我发送给你的内容必须加密,在传输过程中不能被别人看到。 2. 必须保证是我发送,不是别人冒充我的。 公钥,就是给大家用的,你可以通过电子邮件发布,可以通过网站让别人下载

钱包的原理-助记词

匿名 (未验证) 提交于 2019-12-03 00:22:01
首先,我们需要知道一点,比特币钱包里面并没有比特币。钱包是管理密钥、地址、跟踪余额和创建交易的软件。我们的比特币数据是存储在区块链上的,而不是在钱包里。 经过前面几篇文章的解读,我们知道一个私钥生成公钥,公钥生成地址,这三者是一一对应的,就是一个私钥只有一个公钥和一个地址。但是我们在往交易所充币的时候,看到交易所为我们每个人生成一个独一无二的地址。这是怎么做的呢?接下来均益就来解读比特币的钱包。 目前钱包分为两种,一种是 非确定性(随机)的钱包 ,就是随机生成多个私钥,钱包管理这些私钥。如果需要成千上万的地址,通过随机的方式来生成私钥,这就需要存储那么多无规律的私钥,这样就很麻烦不好管理。另一种是 确定性(种子)的钱包 ,就是通过种子可以生成无数的私钥,我们只需要记住种子就可以了。我们在使用钱包时记住的助记词可以生成种子,只要我们保管好助记词,我们的币就能找回来。那么问题来了? 种子是怎么来的? 种子是怎么生成无数地址的? 带着这两个问题,我们来研究一下。先上一个大概图,然后我们再一步一步来解析 钱包生成私钥 主要流程是这样的 第一,随机生成128到258位的随机数,我们这里叫做熵; 第二,熵经过一定处理方法,生成助记词; 第三,助记词经过密钥延伸函数PBKDF2,生成种子; 第四,种子经过HMAC-SHA512算法,生成母密钥; 第五,通过CKD(child key

geth创建外部账号的流程

匿名 (未验证) 提交于 2019-12-03 00:22:01
命令的代码执行流程 一、寻找命令入口 1.1. go-ethereum 工程/cmd/geth/main.go func init() { // 从这里知道,与account 命令相关的代码在accountCommand.go文件中 } 1.2. 打开 cms/geth/accountcmd.go Subcommands:[]cli.Command{ ................... { 从这里可以知道 new 命令的执行函数在accountCreate函数中 ................ 二、accountCreate 函数执行流程 // accountcmd.go func accountCreate (ctx *cli.Context) error { 加载配置文件, 获取keydir,scryptN, scryptP 提示输入密码 // 这里创建地址,生成公钥和私钥 打印地址 } ///////////////////////////////////////////////////////////////////////// //accounts/keystore/keystore_passphrase.go // 具体表现为生成一对公私钥,再由私钥算出地址并构建一个自定义的Ke y // StoreKey generatesa key, encrypts

LTS秘钥协商算法分析

匿名 (未验证) 提交于 2019-12-02 23:49:02
这种算法存在明显的漏洞,攻击者可以将发送给对方的公钥截获,使用ECDH_Generate_key计算出一对(公钥、私钥)对,然后将公钥发送给对方。这样产生的key就是和攻击者协商的。产生中间人攻击时因为没有经过身份认证。 2、带认证的密钥协商

4.tendermint加密算法

匿名 (未验证) 提交于 2019-12-02 23:43:01
身份识别机制概述 无论是中心化系统,还是去中心化系统,都有一个基本的问题:如何表征与验证用户的身份。 在中心化系统中,这一问题是基于统一存储的用户表来实现的:每个用户在表中都有 一条对应的记录,而系统则通过验证用户输入的用户名和口令是否与用户表中的记录一致来识别 用户的身份: 区块链则采用了另外一种不需要集中存储的方案来解决这一问题:每个用户由一对公/私钥来 标识,可以将公钥视为用户名,而私钥视为用户的口令。当用户提交数据时,必须使用自己 的私钥进行签名,这样其他人就可以利用其公钥验证签名数据是否真的来自于该用户。 不过由于公钥比较长,通常会对公钥进行一定的哈希计算,并进行必要的截短,作为区块链上 用户的标识,即我们通常所说的地址。 tendermint提供了两种非对称加密算法的实现:比特币/以太坊采用的secp256k1椭圆曲线算法, 以及tendermint推荐的相对较新的ed25519加密算法,在我们的应用中都可以用来实现身份识别。 经典算法secp256k1 Secp256k1是指比特币中使用的ECDSA(椭圆曲线数字签名算法)曲线的参数,公/私钥就对应于 该曲线上的点。 在比特币流行之前secp256k1几乎无人使用,但现在已经是无人不知了。secp256k1的参数由于 是精心选择的,因此它的计算会比随机参数的曲线快30%,具有较短的密钥,同时也能显著降低