当前位置: 首页 > news >正文

区块链核心技术之密码学研究指南

前言

块链技术从2017年已经开始爆发,2018年更是火热,可以预见未来也一定是一个重要的技术,绝对不是昙花一现,很多有远见的公司早已经在2015年开始布局区块链技术如BAT,TMD等。区块链技术确实会颠覆一些中心化的大公司,但是真正好的大公司是不会等着别人去颠覆,他们会自己先投入研究区块链技术,而密码学作为区块链技术的基石自然成为研究学习的重点。下面通过一张图看看目前区块链的就业情况:

图中的“专家”,“高级研究员”,“总监”之类的岗位,密码学知识成为核心必备技能。 很多公司在发币热潮过去后,意识到区块链的底层技术才是真正有价值的,于是开始在密码学,公识算法,分布式存储,p2p网络系统这四方面招揽人才。

学习大纲推荐

密码学基础其实并没有想象的门槛那么高,具备初中以上数学知识就可以入门,如质数的特性,多项式分解因式等。学习时结合区块链中的使用到的密码学相关算法来研究推导,从而加深对区块链核心技术的理解。中间还要包含对称加密,非对称加密,哈希算法三类加密算法的研究。

可分两部分进行研究学习:

第一部分密码学基础知识和哈希算法原理,通过密码学的角度来看比特币

● 区块链中密码学基础

● 用密码学的角度去看比特币

● 哈希算法和MD5原理解析

● SHA系列加密算法

第二部分对称加密算法 3DES、AES 和非对称加密算法 RSA、ECC 椭圆曲线加密算法的原理

● 对称加解密算法3DES

● AES加密算法推导

● 非对称加密算法RSA的原理

● ECC椭圆曲线加解密算法

重点学习

区块链零知识证明

当理解了默克尔树的特性:任意一个叶子节点的细微变动,都会导致Root节点发生翻天覆地的变化;在不向验证者提供任何有用的信息的情况下,使验证者相信某个论断是正确的。好处是:

● 在使用零知识证明的时候,不降低安全性。

● 零知识证明工作高效,计算过程量小,双方交换信息少。

● 简单,安全,又有很好的隐私,减少计算量。

理解对称加密,非对称加密算法的特点

对称加密:

分组加密和序列加密。前者将明文切分为定长数据块作为基本加密单元,应用最为广泛。后者则每次只对一个字节或者字符进行加密处理,且密码不断变化,只用在一些特定的领域,如数字媒介的加密等。代表算法如MD5,SHA系列算法。 对称加密适用于大量数据的加解密过程;不适合用于签名场景,并且往往需要提前分发好密钥。

非对称加密:

缺点是处理速度比较慢,比对称加密慢了2,3个数量级;加密效率不如对称加密。 非对称加密的安全性需要基于数学问题来保障,目前有:大数质因子分解,离散对数,椭圆曲线等经典数学难题进行保护。代表算法:RSA,Diffie-Hellman,ElGamal,ECC,SM2 适用于签名场景或密钥协商,不适于大量数据加解密

课程推荐

作者最近出了一个达人课《区块链中的密码学》gitbook.cn/gitchat/col… ,感兴趣的朋友可以订阅学习一下(也可以微信扫描文章末尾二维码订阅)。希望学习本课程的同学能够产生对数学和算法的兴趣,对忘记掉的数学知识重新燃起学习的欲望,以前对算法感觉不重要的同学能够加强对算法的学习。 在数学方面强烈建议学习离散数学和微积分,对编程来说是相辅相成的,很难想象只有小学数学水平的人能把架构做好。微积分其实原理并不难理解,总的来说就是把整体拆分,然后根据拆分出的微小部分求和;先分割,再求和,分割就是微分,求和就是积分,剩下的就是找到公式去套用,重点是理解数学思想,公式都是全世界公认的几乎不会有变化,也不需要我们去发明一个公式,但是要理解数学思想之后才能合理运用合适的公式,排列组合等等。 之前听我的恩师胡老大说“编程到最后就是:数据结构+算法”,当时不理解,但是出于对老师的信任一直重视对算法的学习,工作到现在感受特别深。在计算机界,技术日新月异,学习到的技能可能是一时的,但是培养起终身学习的习惯和高效的学习方法,才是最有价值的。

转载于:https://juejin.im/post/5b7a182de51d4538d12c7774

相关文章:

  • Android IOS WebRTC 音视频开发总结(二九)-- 安卓噪声消除交流
  • iview中表单验证,回显的时候有值,但是验证不通过?
  • HBaseConvetorUtil 实体转换工具类
  • vue路由懒加载
  • python之文件和素材
  • LAMP --Apache的源码部署安装
  • Java Thread join() 的用法
  • Airbnb个性化搜索服务架构
  • Skype for Business Server 2015-10-ADFS-2-配置
  • JAVA中的数据结构 - 真正的去理解红黑树
  • ViewPager+seekBar的联动效果
  • Babel 手记
  • 【Spring学习笔记-MVC-10】Spring MVC之数据校验
  • 为什么使用MAVEN 3.2.1会有版本问题?
  • ng6--错误信息小结(持续更新)
  • 收藏网友的 源程序下载网
  • [iOS]Core Data浅析一 -- 启用Core Data
  • [译]前端离线指南(上)
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 77. Combinations
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • If…else
  • Java|序列化异常StreamCorruptedException的解决方法
  • leetcode讲解--894. All Possible Full Binary Trees
  • Python语法速览与机器学习开发环境搭建
  • 理解在java “”i=i++;”所发生的事情
  • 模型微调
  • 前端学习笔记之观察者模式
  • 区块链分支循环
  • 突破自己的技术思维
  • 一个JAVA程序员成长之路分享
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • # 安徽锐锋科技IDMS系统简介
  • #Z0458. 树的中心2
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (4)logging(日志模块)
  • (9)STL算法之逆转旋转
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (力扣题库)跳跃游戏II(c++)
  • (论文阅读11/100)Fast R-CNN
  • (三)终结任务
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (一)u-boot-nand.bin的下载
  • (原創) 如何動態建立二維陣列(多維陣列)? (.NET) (C#)
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .cfg\.dat\.mak(持续补充)
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET程序员迈向卓越的必由之路
  • .Net开发笔记(二十)创建一个需要授权的第三方组件