精华内容
下载资源
问答
  • 区块链加密算法总结

    千次阅读 2020-06-14 17:33:15
    文章目录1、对称加密DES(Data EncryptionStandard)3DES(Triple DES)AES(Advanced EncryptionStandard)2、非对称加密RSA加密法DSA(Digital SignatureAlgorithm)ECC(Elliptic CurvesCryptography)应用数字签名其他场景...

    1、对称加密

    实现原理
    从实现原理上可以分为两种:分组密码和序列密码。前者将明文切分为定长数据块作为基本加密单位,应用最为广泛,分组对称加密代表算法包括DES、3DES、AES、IDEA等:。后者则每次只对一个字节或字符进行加密处理,且密码不断变化,只用在一些特定领域,如数字媒介的加密等。
    序列密码
    又称流密码。1949年,Claude Elwood Shannon(信息论创始人)首次证明,要实现绝对安全的完善保密性(perfect secrecy),可以通过“一次性密码本”的对称加密处理。即通信双方每次使用跟明文等长的随机密钥串对明文进行加密处理。序列密码采用了类似的思想,每次通过伪随机数生成器来生成伪随机密钥串。代表算法包括RC4等。

    DES(Data EncryptionStandard)

    数据加密标准,速度较快,适用于加密大量数据的场合.经典的分组加密算法,1977年由美国联邦信息处理标准(FIPS)采用FIPS-46-3,将64位明文加密为64位的密文,其密钥长度为64位(包含8位校验位)。现在已经很容易被暴力破解;

    3DES(Triple DES)

    基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高.但现在也被认为不够安全;

    AES(Advanced EncryptionStandard)

    AES也为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。 在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的分组长度可以使用128位、 192位或256位。密钥的长度不同,推荐加密轮数也不同。AES的优势在于处理速度快,整个过程可以用数学描述,目前尚未有有效的破解手段;

    2、非对称加密

    原理
    非对称加密算法中,加密密钥和解密密钥是不同的,分别称为公钥(public key)和私钥(private key)。私钥一般需要通过随机数算法生成,公钥可以根据私钥生成。公钥一般是公开的,他人可获取的;私钥一般是个人持有,他人不能获取。
    目前普遍认为RSA类算法可能在不远的将来被破解,一般推荐可采用安全强度更高的椭圆曲线系列算法,ECC将会是今后最重要的主流公钥加密技术。

    RSA加密法

    RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的

    DSA(Digital SignatureAlgorithm)

    数字签名算法,是一种标准的DSS(数字签名标准),严格来说不算加密算法

    ECC(Elliptic CurvesCryptography)

    椭圆曲线密码编码学.ECC和RSA相比具有多方面的绝对优势,主要有:抗攻击性强.相同的密钥长度,其抗攻击性要强很多倍.计算量小,处理速度快.ECC总的速度比RSA、DSA要快得多.存储空间占用小.ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多,意味着它所占的存贮空间要小得多.这对于加密算法在IC卡上的应用具有特别重要的意义.带宽要求低.当对长消息进行加解密时,三类密码系统有相同的带宽要求,但应用于短消息时ECC带宽要求却低得多.带宽要求低使ECC在无线网络领域具有广泛的应用前景
    现代备受关注的算法系列,基于对椭圆曲线上特定点进行特殊乘法逆运算难以计算的特性。最早在1985年由Neal Koblitz和Victor Miller分别独立提出。ECC系列算法一般被认为具备较高的安全性,但加解密计算过程往往比较费时;

    应用

    数字签名

    消息认证码和数字签名技术通过对消息的摘要进行加密,可用于消息防篡改和身份证明问题。
    一个典型的场景是,Alice通过信道发给Bob一个文件(一份信息),Bob如何获知所收到的文件即为Alice发出的原始版本?Alice可以先对文件内容进行摘要,然后用自己的私钥对摘要进行加密(签名),之后同时将文件和签名都发给Bob。Bob收到文件和签名后,用Alice的公钥来解密签名,得到数字摘 要,与收到文件进行摘要后的结果进行比对。如果一致,说明该文件确实是Alice发过来的(别人无法拥有Alice的私钥),并且文件内容没有被修改过(摘要结果一致)。
    除普通的数字签名应用场景外,针对一些特定的安全需求,产生了一些特殊数字签名技术,包括盲签名、多重签名、群签名、环签名等。

    其他场景

    1.盲签名

    盲签名(blind signature)是在1982年由David Chaum在论文《Blind Signatures for Untraceable Payment》中提出。签名者需要在无法看到原始内容的前提下对信息进行签名。 盲签名可以实现对所签名内容的保 护,防止签名者看到原始内容;另一方面,盲签名还可以实现防止追踪(unlinkability),签名者无法将签名内容和签名结果进行对应。典型的实现包括RSA盲签名算法等。
    一般的签名,签名者对自己发出的签名,必须是记得的,比如,在何时何地对谁发的,他自己可以记下来。但是,如果把签名看作是电子现金的话,就涉及到一个匿名性的问题 用实际钞票的时候,钞票上有没有写你的名字?当然没有。那我也不希望,银行通过追踪自己发出签名,来获得用户的消费情况。于是就设计出盲签名。

    2.多重签名

    多重签名(multiple signature)即n个签名者中,收集到至少m个(n>=m>=1)的签名,即认为合法。其中,n是提供的公钥个数,m是需要匹配公钥的最少的签名个数。 多重签名可以有效地被应用在多人投票共同决策的场景中。例如双方进行协商,第三方作为审核方。三方中任何两方达成一致即可完成协商。 比特币交易中就支持多重签名,可以实现多个人共同管理某个账户的比特币交易。

    3.群签名

    群签名(group signature)即某个群组内一个成员可以代表群组进行匿名签名。签名可以验证来自于该群组,却无法准确追踪到签名的是哪个成员。 群签名需要存在一个群管理员来添加新的群成员,因此存在群管理员可能追踪到签名成员身份的风险。 群签名最早于1991年由David Chaum和Eugene van Heyst提出。

    4.环签名

    环签名(ring signature),由Rivest、Shamir和Tauman三位密码学家在2001年首次提出。环签名属于一种简化的群签名。环签名中只有环成员没有管理者,不需要环成员间的合作。 签名者首先选定一个临时的签名者集合,集合中包括签名者自身。然后签名者利用自己的私钥和签名集合中其他人的公钥就可以独立地产生签名,而无需他人的帮助。
    例如,某个用户在线下进行消费,并通过比特币进行支付,那么商家事实上建立了对用户的线上(比特币地址)线下(用户身份)关联。为避免个人隐私信息的泄露,用户必须十分谨慎地对其比特币帐户地址进行管理和隔离。从这个角度来而言,比特币无法满足交易不可追踪和不可关联的条件。 而基于群签名(group signatures)基础上环签名(ring signatures)技术,提供了可行的匿名性解决办法。环签名在保护匿名性方面有很多的用途。


    过程
    1、密钥生成。为环中每个成员产生一个密钥对(公钥PKi,私钥SKi)。
    2、签名。签名者用自己的私钥和任意n个环成员(包括自己)的公钥为消息m生成签名a。
    3、签名验证。验证者根据环签名。和消息m,验证签名是否为环中成员所签,如果有效就接收,否则丢弃。

    数字证书

    对于非对称加密算法和数字签名来说,很重要的一点就是公钥的分发。理论上任何人可以公开获取到对方的公钥。然而这个公钥有没有可能是伪造的呢?传输过程中有没有可能被篡改掉呢?一旦公钥自身出了问题,则整个建立在其上的安全体系的安全性将不复存在。
    数字证书机制正是为了解决这个问题,它就像日常生活中的一个证书一样,可以证明所记录信息的合法性。比如证明某个公钥是某个实体(如组织或个人)的,并且确保一旦内容被篡改能被探测出来,从而实现对用户公钥的安全分发。 根据所保护公钥的用途,可以分为加密数字证书(Encryption Certificate)和签名验证数字证书(Signature Certificate)。前者往往用于保护用于加密信息的公钥;后者则保护用于进行解密签名进行身份验证的公 钥。两种类型的公钥也可以同时放在同一证书中。

    证书认证机构(Certification Authority,CA

    一般情况下,证书需要由证书认证机构(Certification Authority,CA)来进行签发和背书。权威的证书认证机构包括DigiCert、GlobalSign、VeriSign等。用户也可以自行搭建本地CA系统,在私有网络中进行使用。 一个数字证书内容可能包括基本数据(版本、序列号)、所签名对象信息(签名算法类型、签发者信息、有效期、被签发人、签发的公开密钥)、CA的数字签名,等等。 目前使用最广泛的标准为ITU和ISO联合制定的X.509的v3版本规范(RFC 5280),其中定义了如下证书信息域

    证书格式

    X.509规范中一般推荐使用PEM(Privacy Enhanced Mail)格式来存储证书相关的文件。证书文件的文件名后缀一般为.crt或.cer,对应私钥文件的文件名后缀一般为.key,证书请求文件的文件名后缀为.csr。有时候也统一用.pem作为文件名后缀。 PEM格式采用文本方式进行存储,一般包括首尾标记和内容块,内容块采用Base64进行编码。
    可以通过OpenSSL工具来查看其内容: # openssl x509 -in example.com-cert.pem -noout -text

    证书信任链

    怎么证明用来验证对实体证书进行签名的CA公钥自身是否合法呢?毕竟在获取CA公钥的过程中,它也可能被篡改掉。
    实际上,要想知道CA的公钥是否合法,一方面可以通过更上层的CA颁发的证书来进行认证;另一方面某些根CA(Root CA)可以通过预先分发证书来实现信任基础。例如,主流操作系统和浏览器里面,往往会提前预置一些权威CA的证书(通过自身的私钥签名,系统承认这些是合法的证书)。 之后所有基于这些CA认证过的中间层CA(Intermediate CA)和后继CA都会被验证合法。这样就从预先信任的根证书,经过中间层证书,到最底下的实体证书,构成一条完整的证书信任链。

    PKI体系

    在非对称加密中,公钥可以通过证书机制来进行保护,但证书的生成、分发、撤销等过程并没有在X.509规范中进行定义。 实际上,安全地管理和分发证书可以遵循PKI(Public Key Infrastructure)体系来完成。PKI体系核心解决的是证书生命周期相关的认证和管理问题,在现代密码学应用领域处于十分基础和重要的地位。 需要注意,PKI是建立在公私钥基础上实现安全可靠传递消息和身份确认的一个通用框架,并不代表某个特定的密码学技术和流程。实现了PKI规范的平台可以安全可靠地管理网络中用户的密钥和证书。目前包括多个实现和规范,知名的有RSA公司的PKCS(Public Key Cryptography Standards)标准和X.509相关规范等。

    PKI基本组件

    一般情况下,PKI至少包括如下核心组件: ·CA(Certification Authority):负责证书的颁发和作废,接收来自RA的请求,是最核心的部分; ·RA(Registration Authority):对用户身份进行验证,校验数据合法性,负责登记,审核过了就发给CA; ·证书数据库:存放证书,多采用X.500系列标准格式。可以配合LDAP目录服务管理用户信息。 其中,CA是最核心的组件,主要完成对证书信息的维护。
    操作流程
    用户通过RA登记申请证书,提供身份和认证信息等;CA审核后完成证书的制造,颁发给用户。用户如果需要撤销证书则需 要再次向CA发出申请。

    证书签发

    CA对用户签发证书实际上是对某个用户公钥,使用CA的私钥对其进行签名。这样任何人都可以用CA的公钥对该证书进行合法性验证。验证成功则认可该证书中所提供的用户公钥内容,实现用户公钥的安全分发。 用户证书的签发可以有两种方式。一般可以由CA直接来生成证书(内含公钥)和对应的私钥发给用户;也可以由用户自己生成公钥和私钥,然后由CA来对公钥内容进行签名。 后者情况下,用户一般会首先自行生成一个私钥和证书申请文件(Certificate Signing Request,即csr文件),该文件中包括了用户对应的公钥和一些基本信息,如通用名 (common name,即cn)、组织信息、地理位置等。CA只需要对证书请求文件进行签名,生成证书文件,颁发给用户即可。整个过程中,用户可以保持私钥信息的私密性,不会被其他方获知(包括CA方)。 生成证书申请文件的过程并不复杂,用户可以很容易地使用开源软件openssl来生成csr文件和对应的私钥文件。 例如,安装OpenSSL后可以执行如下命令来生成私钥和对应的证书请求文件: $ openssl req -new -keyout private.key -out for_request.csr Generating a 1024 bit RSA private key 需要注意,用户自行生成私钥情况下,私钥文件一旦丢失,CA方由于不持有私钥信息,无法进行恢复,意味着通过该证书中公钥加密的内容将无法被解密。

    证书的撤销

    证书超出有效期后会作废,用户也可以主动向CA申请撤销某证书文件。 由于CA无法强制收回已经颁发出去的数字证书,因此为了实现证书的作 废,往往还需要维护一个撤销证书列表(Certificate Revocation List,CRL),用于记录已经撤销的证书序号。 因此,通常情况下,当第三方对某个证书进行验证时,需要首先检查该证书是否在撤销列表中。如果存在,则该证书无法通过验证。如果不在,则继续进行后续的证书验证过程。

    3、hash散列算法

    MD5

    MD5即Message-Digest Algorithm 5(信息-摘要算法 5)
    MD5一度被广泛应用于安全领域。但是由于MD5的弱点被不断发现以及计算机能力不断的提升,现在已经可以构造两个具有相同MD5的信息[2],使本算法不再适合当前的安全环境。MD5已被证明不具备“强抗碰撞性”。

    SHA1

    SHA-1在许多安全协议中广为使用,包括TLS和SSL、PGP、SSH、S/MIME和IPsec,曾被视为是MD5(更早之前被广为使用的散列函数)的后继者。 但SHA-1的安全性如今被密码学家严重质疑。已经被破解,被证明不具备“强抗碰撞性”,一般使用sha256以上
    当前比较流行的哈希函数主要有128位的MD4和MD5和160位的SHA-1,今天介绍的SHA-2族有着更多位的输出哈希值,破解难度更大,能够提高更高的安全性。

    SHA-2哈希加密算法

    SHA-224、SHA-256、SHA-384,和SHA-512并称为SHA-2。 新的散列函数并没有接受像SHA-1一样的公众密码社区做详细的检验,所以它们的密码安全性还不被大家广泛的信任。 虽然至今尚未出现对SHA-2有效的攻击,它的算法跟SHA-1基本上仍然相似;因此有些人开始发展其他替代的散列算法。


    SHA256加密法
    对于任意长度的消息,SHA256都会产生一个256bit长的哈希值,称作消息摘要。 这个摘要相当于是个长度为32个字节的数组,通常用一个长度为64的十六进制字符串来表示
    具有强碰撞性

    SHA-3哈希加密算法

    SHA-3,之前名为Keccak算法,是一个加密杂凑算法。 SHA-3并不是要取代SHA-2,因为SHA-2目前并没有出现明显的弱点。 由于对MD5出现成功的破解,以及对SHA-0和SHA-1出现理论上破解的方法,NIST感觉需要一个与之前算法不同的,可替换的加密杂凑算法,也就是现在的SHA-3。
    RIPEMD-160哈希加密算法
    RIPEMD-160 是一个 160 位加密哈希函数。 它旨在用于替代 128 位哈希函数 MD4、MD5 和 RIPEMD。 RIPEMD 是在 EU 项目 RIPE(RACE Integrity Primitives Evaluation,1988-1992)的框架中开发的。

    技术原理

    Hash函数又称为哈希函数、散列函数、杂凑函数。它是一种单向密码体制,即一个从明文到密文的不可逆映射, 只有加密过程,没有解密过程。是一种单向的不可逆的加密算法.它对任意长度的输入消息,产生固定长度的输出,这个固定长度的输出称为原消息的散列值(Hash Value)或消息摘要(Message Digest).多用于网络传输过程验证数据的完整性。
    特点
    易压缩
    对于任意大小的输入x,Hash值H(x)的长度很小
    易计算
    对于任意给定的消息,计算其Hash值比较容易
    单向性
    对于给定的Hash值h,要找到m′使得H(m′)=h在计算上是不可行的,即求Hash的逆很困难
    抗碰撞性(冲突避免)
    很难找到两段内容不同的明文,使得它们的Hash值一致(发生碰撞)。
    冲突避免有时候又称为“抗碰撞性”,分为“弱抗碰撞性”和“强抗碰撞性”。如果给定明文前提下,无法找到与之碰撞的其他明文,则算法具有“弱抗碰撞性”;如果无法找到任意两个发生Hash碰撞的明文,则称算法具有“强抗碰撞性”。
    输入敏感
    原始输入信息发生任何改变,新产生的Hash值都应该出现很大不同;
    从比特位角度,指的是1比特位的输入变化会造成1/2的比特位发生变化

    应用

    数字摘要
    数字摘要是对数字内容进行Hash运算,获取唯一的摘要值来指代原始完整的数字内容。数字摘要是Hash算法最重要的一个用途。利用Hash函数的抗碰撞性特点,数字摘要可以解决确保内容未被篡改过的问题。
    总结
    对称加密算法,速度快,安全性低,目前大量数据加密建议采用对称加密算法,提高加解密速度 非对称加密算法,速度较慢,安全性高,小量的机密数据,可以采用非对称加密算法。 hash散列算法 主要用于验证,防止信息被修.具体用途如:文件校验、数字签名、鉴权协议 实际工作中常用的方式是采用非对称加密算法管理对称算法的密钥,然后用对称加密算法加密数据,这样我们就集成了两类加密算法的优点,既实现了加密速度快的优点,又实现了安全方便管理密钥的优点。
    应用

    4、国密算法

    定义
    国密即国家密码局认定的国产密码算法,即商用密码。主要有SM1,SM2,SM3,SM4,SM7、SM9、祖冲之密码算法(ZUC)。密钥长度和分组长度均为128位。其中SM1、SM4、SM7、祖冲之密码(ZUC)是对称算法;SM2、SM9是非对称算法;SM3是哈希算法。其中SM1、SM7算法不公开,调用该算法时,需要通过加密芯片的接口进行调用
    SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。 SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。 SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。 SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。

    SM1对称密码

    SM1 算法是分组密码算法,分组长度为128位,密钥长度都为 128 比特,算法安全保密强度及相关软硬件实现性能与 AES 相当,算法不公开,仅以IP核的形式存在于芯片中。 采用该算法已经研制了系列芯片、智能IC卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域)。

    SM2椭圆曲线公钥密码算法

    SM2算法就是ECC椭圆曲线密码机制,但在签名、密钥交换方面不同于ECDSA、ECDH等国际标准,而是采取了更为安全的机制。另外,SM2推荐了一条256位的曲线作为标准曲线。 SM2标准包括总则,数字签名算法,密钥交换协议,公钥加密算法四个部分,并在每个部分的附录详细说明了实现的相关细节及示例。 SM2算法主要考虑素域Fp和F2m上的椭圆曲线,分别介绍了这两类域的表示,运算,以及域上的椭圆曲线的点的表示,运算和多倍点计算算法。然后介绍了编程语言中的数据转换,包括整数和字节串,字节串和比特串,域元素和比特串,域元素和整数,点和字节串之间的数据转换规则。

    SM3杂凑算法

    SM3密码杂凑(哈希、散列)算法给出了杂凑函数算法的计算方法和计算步骤,并给出了运算示例。此算法适用于商用密码应用中的数字签名和验证,消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。在SM2,SM9标准中使用。 此算法对输入长度小于2的64次方的比特消息,经过填充和迭代压缩,生成长度为256比特的杂凑值,其中使用了异或,模,模加,移位,与,或,非运算,由填充,迭代过程,消息扩展和压缩函数所构成。具体算法及运算示例见SM3标准。

    SM4对称算法

    此算法是一个分组算法,用于无线局域网产品。该算法的分组长度为128比特,密钥长度为128比特。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。 此算法采用非线性迭代结构,每次迭代由一个轮函数给出,其中轮函数由一个非线性变换和线性变换复合而成,非线性变换由S盒所给出。其中rki为轮密钥,合成置换T组成轮函数。轮密钥的产生与上图流程类似,由加密密钥作为输入生成,轮函数中的线性变换不同,还有些参数的区别。SM4算法的具体描述和示例见SM4标准。

    SM7对称密码

    SM7算法,是一种分组密码算法,分组长度为128比特,密钥长度为128比特。SM7适用于非接触式IC卡,应用包括身份识别类应用(门禁卡、工作证、参赛证),票务类应用(大型赛事门票、展会门票),支付与通卡类应用(积分消费卡、校园一卡通、企业一卡通等)。

    SM9标识密码算法

    为了降低公开密钥系统中密钥和证书管理的复杂性,以色列科学家、RSA算法发明人之一Adi Shamir在1984年提出了标识密码(Identity-Based Cryptography)的理念。标识密码将用户的标识(如邮件地址、手机号码、QQ号码等)作为公钥,省略了交换数字证书和公钥过程,使得安全系统变得易于部署和管理,非常适合端对端离线安全通讯、云端数据加密、基于属性加密、基于策略加密的各种场合。2008年标识密码算法正式获得国家密码管理局颁发的商密算法型号:SM9(商密九号算法),为我国标识密码技术的应用奠定了坚实的基础。 SM9算法不需要申请数字证书,适用于互联网应用的各种新兴应用的安全保障。如基于云技术的密码服务、电子邮件安全、智能终端保护、物联网安全、云存储安全等等。这些安全应用可采用手机号码或邮件地址作为公钥,实现数据加密、身份认证、通话加密、通道加密等安全应用,并具有使用方便,易于部署的特点,从而开启了普及密码算法的大门。

    ZUC祖冲之算法

    祖冲之序列密码算法是中国自主研究的流密码算法,是运用于移动通信4G网络中的国际标准密码算法,该算法包括祖冲之算法(ZUC)、加密算法(128-EEA3)和完整性算法(128-EIA3)三个部分。目前已有对ZUC算法的优化实现,有专门针对128-EEA3和128-EIA3的硬件实现与优化。 密码算法作为国家战略资源,比历史上任何时候都显得更为关键。在大数据和云计算的时代,关键信息往往通过数据挖掘技术在海量数据中获得,所以每一个人的信息保护都非常重要。

    5、布隆过滤器

    布隆过滤器布隆过滤器(Bloom Filter)于1970年由Burton Howard Bloom在论文《Space/Time Trade-offs in Hash Coding with Allowable Errors》中提出。布隆过滤器是一种基于Hash的高效 更高效的布隆过滤器 布隆过滤器采用了多个Hash函数来提高空间利用率。对同一个给定输入来说,多个Hash函数计算出多个地址,分别在位串的这些地址上标记为1。进行 查找时,进行同样的计算过程,并查看对应元素,如果都为1,则说明较大概率是存在该输入。 hash算法会误报存在,布隆过滤器会减少误报的存在。比如hash冲突,hash算法会把另一个不存在的误报存在,布隆过滤器多种hash算法,只要有一个为0就不存在了,减少了误报 无论是Hash算法,还是布隆过滤器,基本思想是一致的,都是基于内容的编址。Hash函数存在冲突,布隆过滤器也存在冲突。这就造成了两种方法都存在着误报(false positive)的情况,但绝对不会漏报(false negative)。
    布隆过滤器可以联想到再散列法

    6、同态加密

    1.定义同态加密(homomorphic encryption)是一种特殊的加密方法,允许对密文进行处理得到仍然是加密的结果。即对密文直接进行处理,跟对明文进行处理后再对处理结果加密,得到的结果相同。从抽象代数的角度讲,保持了同态性。
    同态性来自代数领域,一般包括四种类型:加法同态、乘法同态、减法同态和除法同态。同时满足加法同态和乘法同态,则意味着是代数同态,称为全同态(full homomorphic)。同时满足四种同态性,则称为算数同态。 对于计算机操作来讲,实现了全同态意味着对于所有处理都可以实现同态性。只能实现部分特定操作的同态性,称为特定同态(somewhat homomorphic)。 仅满足加法同态的算法包括Paillier和Benaloh算法;仅满足乘法同态的算法包括RSA和ElGamal算法。 同态加密在云计算和大数据的时代意义十分重大。目前,虽然云计算带来了包括低成本、高性能和便捷性等优势,但从安全角度讲,用户还不敢将敏感信息直接放到第三方云上进行处理。如果有了比较实用的同态加密技术,则大家就可以放心地使用各种云服务了,同时各种数据分析过程也不会泄露用户隐私。加密后的数据在第三方服务处理后得到加密后的结果,这个结果只有用户自身可以进行解密,整个过程第三方平台无法获知任何有效的数据信息。
    另一方面,对于区块链技术,同态加密也是很好的互补。使用同态加密技术,运行在区块链上的智能合约可以处理密文,而无法获知真实数据,极大地提高了隐私安全性。

    7、零知识证明(zero knowledge proof)

    零知识证明(zero knowledge proof)是这样的一个过程,证明者在不向验证者提供任何额外信息的前提下,使验证者相信某个论断是正确的。 例如,Alice向Bob证明自己知道某个数字,在证明过程中Bob可以按照某个顺序提出问题(比如数字加上某些随机数后的变换)由Alice回答,并通过回答确信Alice较大概率确实知道某数字。证明过程中,Bob除了知道Alice确实知 道该数字外,自己无法获知或推理出任何额外信息(包括该数字本身),也无法用Alice的证明去向别人证明(Alice如果提前猜测出Bob问题的顺序,存在作假的可能性)。
    目前一般认为至少要满足三个条件: ·完整性(Completeness):真实的证明可以让验证者成功验证; ·可靠性(Soundness):虚假的证明无法让验证者保证通过验证,但允许存在小概率例外; ·零知识(Zero-Knowledge):如果得到证明,无法从证明过程中获知除了所证明信息之外的任何信息。

    8、量子密码学

    量子密码学(quantum cryptography)随着量子计算和量子通信的研究而受到越来越多的关注,将会对已有的密码学安全机制产生较大的影响。 量子计算的概念最早是物理学家费曼于1981年提出,基本原理是利用量子比特可以同时处于多个相干叠加态,理论上可以同时用少量量子比特来表达大量的信息,并同时进行处理,大大提高计算速度。如1994年提出的基于量子计算的Shor算法,理论上可以实现远超经典计算速度的大数因子分解。这意味着大量加密算法包括RSA、DES、椭圆曲线算法等都将很容易被破解。但量子计算目前离实际可用的通用计算机还有一定距离。 量子通信则提供对密钥进行安全分发的机制,有望实现无条件安全的“一次性密码”。

    展开全文
  • #资源达人分享计划#
  • blockchain-python:使用Flask API客户端轻松实现区块链技术和加密协议
  • #资源达人分享计划#
  • 没有区块链 没有总帐 非常快,因为去中心化 比比特币便宜100倍 工作量证明 独特的共识协议 预先开采,总容量为20亿ZLD 匿名 用Ruby写 您可以在找到更多详细信息。 您也可以在论坛上找到我们。 加入我们的,现场...
  • 如果您想了解区块链到底是什么?我们身边有哪些具体应用?...比特币、区块链、加密货币、分布式账户应用、加密协议与平台的未来会是怎样?它的前景和未来究竟会怎样?那就让这本书带领您开启一段揭秘区块链的旅程吧!
  • 区块链P2P网络协议演进过程

    千次阅读 2021-09-15 17:03:18
    区块链是以加密机制、储存机制、共识机制等多种技术组成的分布式系统,可以在无中心服务器的情况下实现相互信任的点对点交易功能。区块链最大的特点是去中心化和分布式,区块链共识机制使得参与节点共同为系统提供...

    区块链是以加密机制、储存机制、共识机制等多种技术组成的分布式系统,可以在无中心服务器的情况下实现相互信任的点对点交易功能。区块链最大的特点是去中心化和分布式,区块链共识机制使得参与节点共同为系统提供服务,实现中心化系统中类似金融中介机构的功能。共识机制是网络大部分节点在约定时间段内对交易状态达成相同的确认,其中共识性通过工作量证明(POW)、权益证明(POS)、实用拜占庭容错(PBFT)等多种共识算法实现。而一致性则要求大部分节点在约定时间段内保持数据内容一致,从而利用共识算法实现共识。传统中心化网络系统需要中心提供强大稳定的服务器和足够的带宽来支持客户端节点使用。通过 P2P,区块链系统可以在没有中心服务器的情况下达到快速同步数据、实现共识机制的一致性的目的。共识算法和 P2P网络分别承担共识性和一致性的任务,共同组成区块链的共识机制,从而实现区块链的分布式和去中心化。

    P2P网络与区块链

    1. P2P在区块链的应用
      P2P网络自身有多方面优点,在区块链的应用如下:
    • 去中心化,区块链的资源和服务分布在所有参与节点上,通过共识机制维护区块链网络的一致性,无须中心系统的存在;
    • 可扩展性,区块链节点可以自由加入、退出,网络系统根据节点自由扩展;
    • 健壮性,区块链网络没有中心节点,也就没有了攻击对象,参与节点分布在网络中,部分节点遭到破坏对区块链系统无影响;
    • 高性价比,不需要昂贵的专业设备搭建中央服务器、不需要支付昂贵的宽带费用,普通用户也可以参与区块链
    • 隐私保护,区块信息采用广播机制,无法定位广播初始节点,防止用户通信被监听,保护用户隐私;
    • 负载均衡,区块链通过限制节点连接数等配置,来避免资源负载、网络阻塞。
    1. 区块链P2P网络分类
      针对区块链应用特点,按照 P2P网络是否去中心化、节点 地址是否结构化两个方面,将 P2P网络分为四类。
    • 中心化P2P网络 中心服务器对于中心化网络结构至关重要,保存接入节点的地址信息是网络的核心。普通节点通过接入中心服务器获取其他节点地址,从而实现节点与节点之间的通信。著名的 MP3共享软件 Naspter采用的就是中心化网络结构。将音乐文件与保存文件的节点相互关联,用户查找某个音乐时,中心服务器告知储存节点地址,用户点对点连接以获得音乐。中心服务器也决定着网络整体稳定性,一旦中心服务器出现问题,整个P2P网络就会瘫痪。这与传统中心化网络类似,如银行等金融机构。不同的是 P2P中心服务器只提供索引,而传统中心服务器提供完全服务。P2P网络节点可以直接与另外一个节点通信,而金融机构不允许节点间通信。
    • 全分布式非结构化P2P网络 全分布 P2P节点可以自由加入、退出,并且没有中心节点,节点地址没有结构化统一标准,整个网络结构呈随机图的结构,无固定网络结构图。其成功的应用产品是 gnutella通信协议,它是一种点对点的搜索系统。gnutella采用的是洪泛(flooding)技术实现发现其他节点和随机转发的机制,采用 TTL(timetolive)的减值来实现控制消息通信有限次数传播。然而完全的自由意味着新节点无法得知P2P网络节点信息,从而无法加入网络。因此 gnutella使用了目录服务器来方便节点得到其他节点的网络地址。全分布式P2P网络更加自由化的同时也带来了节点管理的问题,节点频繁地加入/退出使得整个网络结构无法稳定,大量的广播消息不仅造成资源浪费,甚至会阻塞网络。中本聪设计的比特币采用的就是这种P2P网络结构,全分布式使得任何人任何节点都可以参与,非结构化使得节点间既可以通过区块链P2P协议同步区块数据,又保持匿名隐私保护,使得区块链分布式去中心化概念深入人心。
    • 全分布式结构化P2P网络 全分布式最大的问题在于节点地址管理,节点间没有固定规则约束,无法精确定位节点信息,只能通过洪泛查询的方式进行查找,对网络的消耗很大。结构化网络采用分布式哈希表(distributedhashtable,DHT),通过如 hash函数一类的加密散列函数将不同节点地址规范为标准长度数据,比较成功的案例有 Chord、Pastry等。网络结构与非结构化相同,都是随机形式、无固定结构,但节点管理有固定结构图。以太坊将节点椭圆加密算法的公钥转换为 64 Byte的 nodeId作为唯一标志符来区分节点,使得以太坊可以在没有中心服务器的情况下实现节点地址的精确查找。
    • 半分布式P2P网络 结合中心化和分布式模型各自的优点,将节点分类成普通节点和超级节点,从而构成了半分布式网络结构。每个超级节点维护部分网络节点地址、文件索引等工作,超级节点共同实现中心服务器功能。超级节点本身却是分布式的,可以自由扩展退出,具备分布式网络优点,kazza是其代表性的成功应用。超级账本(fabric)采用的 P2P网络结构就是半分布式,将节点分为普通用户节点和超级节点(排序、背书节点等)。超级节点可以由普通节点选举,也可以自行配置,单独一个超级节点停机不影响系统运行。超级账本所有交易必须通过超级节点认证,区块也是由超级节点生成,普通节点间可以互相同步区块。

    四种P2P网络结构各有优缺点,也适用于不同的应用场景。比特币最初的目标是建立去中心化的交易平台,致力于代替银行等金融机构实现价值转移交换。同时,中心化 P2P网络不符合区块链去中心化特征,没有相关产品。而中心化 P2P网络类似传统的中介式机构如银行等,本文所讨论的中心化系统是指银行类金融中介机构,其不具备 P2P功能,仅作为对标标的,以实现对区块链产品的对比评判。中心化 P2P网络是区块链产品致力于替代的标志系统,本文通过讨论中心化系统,从 P2P应用、区块链应用、是否去中心化、节点是否可精确查找等方面比较了四种 P2P网络

    在这里插入图片描述

    比特币的P2P网络及节点发现

    比特币开启了区块链时代,任何节点开启客户端后即可实现去中心化可信任的比特币交易。然而当一个全新的节点加入比特币网络时,首先要做的是接入网络。由于比特币完全去中心化,节点自由加入、退出导致新加入的节点无从获取网络中节点地址从而接入网络。为此,比特币设计三种节点发现方式:

    a)种子节点。Napster采用的是中央服务器进行索引,由于中央服务器的存在,新加入节点可以稳定地接入网络。比特币虽然没有中心化服务器,但是也采用了 Napster的思路,设立“种子”节点。比特币将一部分长期稳定的节点硬编码至代码中,这些节点在初始启动时提供最初接入网络的入口节点。新节点通过这些稳定节点作为中介连接其他节点,并且可以持续获取区块链网络节点地址列表,所以这些节点也称之为种子节点。下图为比特币源码,方框中这些地址即为比特币初始化时加载的种子地址。
    在这里插入图片描述

    b)地址广播。某个节点接入后,就能以这个节点为中介获取网络其他节点地址,这种方式被称为地址广播。广播包含如下两种方式:(a)主动广播(推)节点 A地址。比特币通过 Net.AdvertiseLocal()方法,将自身节点信息推送给其他节点。如图 4所示,这是一个主动单向过程,节点 B接收后只保存在本地,并不作回应;同样,节点 B与其他节点间也可以通过推送自身地址传递给其他连接的节点,通过推的方式使得连接节点获得自身节点的地址信息。(b)主动获取(拉)其他节点地址。推送自身地址,只局限于自身连接的节点,并不足以将地址广播出去,比特币还有另外一种地址广播机制,通过 Net.Addresses()方法主动拉取地址。如图 4所示,节点 A请求地址后获取节点 B,节点 B返回节点 B收录的地址信息。一次请求一次响应,以避免对网络资源的浪费。节点 B也可以通过向其他节点请求地址来扩充自身地址库。其他节点主动推送的地址也在拉取动作时返回请求节点,达到地址广播的目的。比特币的两种地址获取方式是独立的,这样可以防止攻击者通过伪造大量假的地址并广泛散播,导致正常节点无法接入比特币网络或接入虚假网络。

    在这里插入图片描述

    c)地址数据库。为避免种子节点连接数及带宽限制,比特币节点接入网络后通过广播获取其他节点信息,并将结果保存,以便下次使用时接入网络。比特币客户端将获取的节点信息保存在 peers.dat本地文件中,使用的是 levelDB格式储存数据。如果节点 A与已建立的连接节点 B没有数据通信,节点 A会定期发送 ping消息(一个 8bit的随机数)到节点 B;节点 B会回复 pong消息,它是一个包含 ping随机数的响应报文,用以维持连接。如果节点持续某个连接长达 20min没有任何响应,它会被认为已经从网络中断开。比特币客户端启动后会发起定时循环任务,检查连接节点是否在线,并将失败的节点保存在 banlist.dat本地文件中。

    比特币通过以上三种方式保持稳定的网络接入,实现对频 繁进出节点的地址列表维护,不需要中心机构的存在即可保持 节点可以自由加入网络,从而保障比特币 P2P网络稳定。

    以太坊的P2P网络及节点发现

    以太坊是在比特币基础上发展而来的,借鉴了很多比特币的思想,就连白皮书都有一半内容是描述比特币的功能。所以以太坊不仅能够实现类似比特币的交易系统,更希望构建基于区块链的生态环境,拓展依赖于以太坊衍生的分布式应用(Decentralizedapplication Dapp)。以太坊开发人员开发了一款分布式消息通信平台 Whisper和一款分布式存储平台以及内容分发服务平台 Swarm,这些应用的实现依赖于节点可以根据需要精确查找另一个节点地址的功能,而非结构化 P2P网络结构无法满足。因此以太坊采用结构化P2P网络,通过DHT技术实现结构化。DHT将 P2P网络节点通过 hash算法散列为标准长度数据,整个网络构成一个巨大的散列表。每个参与节点都有一部分的散列表,并储存维护自身数据,散列表分布在P2P网络各个节点上,任何接入 P2P网络的节点都有自身位于散列表中位置的 ID,可以通过 DHT寻找更多节点,也可以被其他节点根据 ID值精确查找。虽然 DHT支持节点自由地加入或退出,但 DHT的复杂维护机制使其无法适应高频的节点变化。以太坊使用的是 Kadenlia(KAD)协议,它是 DHT协议的一种,使用该协议可以快速准确地查找地址。

    Kad介绍

    与传统的 DHT比较,KAD有如下优点:

    KAD的查询请求是并行、异步的,可以避免节点退出或故障导致的查询失败;
    KAD简化了节点间为了了解彼此而必须发送的配置消息数量,并且在查找时自动交换配置信息;
    KAD采用二叉树节点分为多个 KAD桶,简化查询结构。使用单向性异或算法(XOR)计算距离,保证对同一个 targetID所有查询都会收敛到同一条路径,以减轻节点间查询网络消耗,提升查询效率;
    节点在记录其他节点是否可用时所采用的算法可以阻止一些常见的拒绝服务(Denial Of Service,DOS)攻击。以太坊 KAD与传统 KAD相比,收敛方式不同。传统的 KAD是以自身 selfID作为收敛目标,而以太坊不仅以自身 selfID为收敛目标,还通过随机生成的 targetID作为收敛目标,以生成较大范围的散列表

    以太坊节点发现

    1. 种子节点

        a)硬编码种子节点。同比特币及其他 P2P软件一样,新节点使用硬编码的种子节点,接入以太坊 P2P网络。它由节点信息、网络地址URL和数据协议三部分构成。节点信息是 16进制转换过的128bit节点ID;网络地址 URL是分割符@后的 IP地址;数据协议是 TCP监听端口号(listening port)30303或者 UDP发现端口号(discovery port)30301。
      
        b)矿池种子节点。通过IP查询工具查询图 5中的地址,分别来自爱尔兰、美国、巴西、澳大利亚、新加坡以及德国。跨国通信的高延迟无法满足国内节点网络需求。为了更加便捷地接入网络,EthFans发起星火节点计划。EthFans鼓励国内对以太坊项目感兴趣的组织和个人分享其稳定运行节点地址信息,筛选其中优质节点,打包成 staticnodes.json文件后发布。以太坊用户下载后可以连接到更多国内节点,加快了以太坊国内的网络速度。类似的配置文件还有 trustednodes.json,该文件保存信任节点信息。这两个文件不限定内容,只限定文件名及格式,以固定文件名的形式硬编码保存在配置文件内,配置的节点会在以太坊启动时加载。
      

    在这里插入图片描述
    在这里插入图片描述
    2)地址数据库 类似比特币,以太坊也采用地址数据库的形式保存连接过的节点。以太坊采用的是 LevelDB作为历史文件格式,生成多个历史数据库文件。对于首次连接以太坊网络的节点,地址数据库是空的,后续随着地址广播,逐渐填满地址列表。对于再次连接以太坊的节点,启动时以太坊使用loadSeedNodes()方法将种子节点和历史数据一起读取,快速高效地连接以太坊 P2P网络

    3)地址查询 以太坊 P2P网络最大的特点是可以进行地 址查询。以太坊的 KAD参数配置如图 7所示。

    在这里插入图片描述

    4)地址广播 由于有固定的 KAD表结构,每个节点根据自身 nodeID有唯一的固定位置,所以以太坊没有主动广播自身地址的方法。但是通过 doRefresh()方法的 lookup()方法搜寻与自身最近的 16个节点进行连接,接着随机生成 3个 targetID,利用 lookup()方法寻找节点。寻找后利用 ping pong方法进行双向的通信,对方节点会将连接的节点比较远近后保存至自身 KAD桶,同时把节点信息储存在地址数据库中,通过这种方式实现将自身节点地址告知其他节点的目标。

    超级账本的 P2P网络及节点发现

    随着比特币和以太坊的快速发展,区块链技术的应用范围不再局限于交易系统。对某些企业级问题,区块链也是完美的解决方案,如物流链、供应链等无中心系统下实现货物追踪、防窜改等问题。超级账本 Fabric应运而生,Fabric作为企业级区块链应用,各节点权限是不同的,交易处理必须经过超级节点才能完成。虽然 Fabric没有实现去中心化,却可以通过划分不同节点之间的工作负载实现优化网络效率。为了保证区块链网络的安全性、可信赖性及可测量性,Fabric采用 Gossip作为 P2P网络传播协议。Gossip支持超级节点网络架构,超级节点具有稳定的网络服务和计算处理能力,负责 Fabric的交易排序和新区块广播功能,维护 Fabric网络信息更新、节点列表管理等内容。

    Gossip介绍

    Gossip是基于传染病感染传播机制而形成的,被广泛用于分布式系统作为底层通信协议。Gossip并非新的P2P网络思想,同传统的洪泛、路由算法相比,Gossip提供了明确的网络通信类型。Facebook开发的 cassandra使用的就是 Gossip协议,是一种流行的分布式结构化数据存储方案。Gossip在Fabric网络上负责维护新节点的发现、循环检查节点、剔除离线节点、更新节点列表。Fabric通过与节点列表中的节点广播通信,发现新的区块或本地错误及丢失的区块,更新维护本地账本数据。Gossip协议有如下三种通信类型:

        a)Push,即主动信息推送。假设自身为节点 A,随机选择节点列表中的 N个节点作为目标节点。主动推送包含节点 A自身 ID的信息至 N个节点,N个节点接收后,对比自身数据、更新自身信息。N个节点也可以继续 push信息至其他节点。
    
        b)Pull,即主动拉取信息。假设自身为节点 A,随机选择节点列表中的 N个节点作为目标节点。节点 A将自身 ID和请求内容如节点列表、区块信息等封装成请求报文,主动发送给N个节点,N个节点收到请求后将相应信息返回给节点 A,节点 A对比本地数据后更新自身本地数据。
    
       c)Push/Pull,即混合模式。该模式虽然综合了 push与 pull的优点,但是网络资源消耗较大。假设自身为节点 A,pull取 N个节点信息后同节点 A本地数据比较,再将较新数据 push至N个节点,N个节点比较后更新自身数据。每个节点发送消息前都会通过自身节点的安全标志符PKI_ID和加密签名封装消息。恶意节点没有 Fabric证书颁发机构(CA)认证的密钥而无法冒充其他节点发送信息,保障通信安全性。Gossip启动流程的 Fabric源码
    

    在这里插入图片描述

    Fabric节点发现

    1)种子节点 Fabric采用的不是硬编码的形式,而是通过core.yaml配置文件进行配置的配置文件形式。以太坊采用Viper作为配置文件加载方案。Viper是国外计算机爱好者spf13(昵称)编写的开源配置解决方案,它不用关心文件格式,可以获取本地环境变量,也可以从远端获取配置文件,同时还有缓冲机制,可以在不重启服务的情况下动态加载新的配置项的值并使之实时生效。这对 Fabric网络至关重要,超级节点管理员可以在不影响系统运行、无须重启系统的情况下更新配置信息并使之生效。而比特币和以太坊由于去中心化,需要变更只能进行全部节点投票,一旦无法达成一致则造成分叉,如比特币分叉为比特币(BTC)和比特币现金(BCH),以太坊则分叉为以太坊(ETH)和以太坊经典(ETC)。种子节点的加载流程如下:
    a)启动 Gossip服务 newGossipService()方法,在服务启动过程中调用 g.connect2BootstrapPeers()方法加载种子节点。
    b)通过 g.BootstrapPeers()方法读取 core.yaml配置文件,获取 bootstrap超级节点的值,保存为 endpoint终端地址临时变量。
    c)启动连接 g.disc.Connect方法将 endpoint作为参数传入。
    d)使用 d.createMembershipRequest()方法生成请求信息,赋值给临时变量m并加密签名为请求信息 req。
    e)将 endpoint和自身 PKIID组合,利用 god.sendUtilAcked()方法将 req信息发送至对应 endpoint。
    f)获得 endpoint节点返回信息后更新地址库。

    2)地址数据库 Fabirc采用超级节点的形式,都需要接入超级节点;而且使用场景是企业级应用,所以无须保存历史数据,因为保存数据、验证节点是否在线需要耗费大量资源。既然有超级节点的存在,只需要每次从超级节点取地址即可。超级节点也完成了地址数据库的工作,加载种子地址后,将获取节点列表保存至内存中,而非比特币和以太坊的文件形式。节点通过解析收到的消息来检查节点是否正常,进而维护节点列表,同时还定时与连接节点通信,一旦被连接节点超过配置时间没有响应,则将其移出节点列表,加入离线列表。

    3)地址广播 Gossip通过启动 g.syncDiscovery()这一循环方法,定时 ss循环查找节点。通过在节点列表中随机选择N个节点,push索要节点列表信息并同步自身节点列表。core.yaml中默认配置 S为 4s,N为3个节点,可以根据需求进行更改。在 push的同时也将自身节点信息传递给其他节点,并通过广播传递至整个网络。

    4)地址查询 Fabric没有业务场景需要精确查询某个 ID的地址,所以目前不支持地址查询。但是因为超级节点的存在,超级节点拥有所有已连接节点地址信息,可以通过扩展Fabric代码来增加功能的方式实现查找。

    分析对比

    每种 P2P网络结构拥有各自的优缺点,针对不同的区块链应用场景、不同的业务需求,P2P网络的使用也不同。区块链主要应用场景是代币交易系统。为了更直观地对比不同区块链系统 P2P网络结构,使用银行类中介系统替代中心化网络结构的产品。网络结构属于架构设计层次,与功能点不同,本文只描述不同区块链产品网络结构组成,不评分对比。区块链作为创新产品其主要特点是去中心化、匿名性、可信任及智能合约,这些是功能上的创新。本文通过分析区块链产品源代码的技术实现来分析比较其底层架构及技术特点,对应着从去中心化程度、隐私保护、安全性、应用的丰富程度四个维度进行分析评价,每个维度代表不同功能点,功能点属性具有相同的权重。P2P网络虽然不是区块链的创新内容,但其作为区块链底层技术支撑,网络质量决定着区块链产品的成败。本文从源代码技术角度分析,将 P2P网络作为区块链的一个功能点进行分析对比,通过从接入效率维度评价区块链 P2P网络优劣,从而合理假设五个评价维度皆为功能点属性,权重相同。

    1)去中心化程度 P2P网络是区块链分布式的基石,自从比特币成功以来,区块链分布式去中心化概念深入人心。传统中心金融机构所有交易必须经中央系统处理,参与节点间无法直接通信,是完全的中心化。比特币和以太坊都是完全的去中心化,所有节点权限相同,虽然有种子节点的存在,但它们在架构上和普通节点没有区别,只是相对高性能、高稳定性的节点,在去中心化上两者表现相同。Fabric则相当于分布式的中心化系统,超级节点具有中心化服务器功能,同时超级节点也是分布式集群,具有分布式特征,所以 Fabric去中心化表现介于银行类系统和比特币以太坊之间。

    2)节点接入网络效率 节点接入网络需要做两件事:

      a)需要发现节点接入区块链网络;
    
      b)需要同步区块账本数据等信息才能使用区块链服务。银行类中心系统所有维护工作都由中心系统负责,节点接入即可使用服务,所以节点可以快速接入/退出,接入效率最高。由于没有中心节点,账本保存在本地,比特币和以太坊都需要同步全部区块后才进行共识挖矿。但比特币节点地址管理无须构建维护 DHT,可以直接广播而不用进行查找,所以节点发现效率高于以太坊。Fabric有可以灵活配置的超级节点,所以接入效率高于比特币,但弱于有强大性能服务器的银行类金融系统。
    

    3)安全性 常见的区块链攻击方式有两种:

      a)节点伪造,冒充其他节点进行交易;
    
      b)Dos攻击,攻击服务提供者使系统瘫痪。中心化金融系统除了采用多种加密方式外,还绑定个人信息,在交易过程中结合人脸识别、PIN密码、指纹及绑定个人信息的智能卡、与密码结合的双重保障等多种方式确保交易安全,强大的网络及服务器能力也使 Dos攻击变得非常困难。比特币与以太坊采用账户与节点分离的设计,不限制节点的加入与退出,使得节点伪造失去意义;所有节点通过共识机制提供服务,无中心系统,Dos只能攻击整个网络,而这样的代价是巨大的,迄今为止没有成功攻击比特币与以太网的 Dos的案例。Fabric采用 CA节点分配密钥以避免伪造节点,同时利用分布式超级节点抵抗攻击。Fabric在安全性上相对比特币、以太坊增加了节点管理,但认证要求弱于银行类系统,所以安全性介于两者之间。
    

    4)隐私保护 身份信息隐私保护分为两个层面:基本层次是身份标志保护;高级层次是用户登录行为的不追踪性。由于区块链的去中心化特点,隐私问题在区块链中对应为基本层次节点 IP地址是否匿名、高级层次身份信息是否保密两个方面。节点 IP地址包含物理地理信息等,可以用做节点的身份标志,但存在一个物理节点多个用户使用的情况,而身份信息则可以精确定位用户,追踪用户行为。以太坊由于有 DHT保存节点 IP地址信息,有可能被针对性地攻击。账户方面同比特币一样,不包含身份信息以保护隐私。Fabric节点信息保存在中心服务器,虽然节点间采用随机连接的方式,但 IP地址、身份信息等内容全部暴露给超级节点,对于超级节点是公开的,对于普通节点是匿名的,所以匿名性介于中心系统与分布系统之间。对于银行类中心系统,身份信息是认证信息的一部分。身份证等信息对中心服务器是公开的,但节点间无法通信。银行类中心系统负责保护身份信息,一旦中心系统作恶,则有可能泄露隐私信息。比特币采用洪泛的方式广播,无法定位节点是信息最初发出节点还是转发节点;保护节点地址信息;账户采用匿名制,保护用户身份信息。

    5)应用的丰富程度 P2P网络使得区块链系统内节点间可以相互通信,构成系统网络通信底层,在此基础上区块链上层延伸出了一系列应用。银行类系统虽然功能丰富,但因为是中心化系统,参与者无法发布智能合约、分布式扩展应用等,限制了应用的扩展。比特币由于不支持智能合约,主要功能依旧是交易系统,所以扩展应用最少。以太坊 DHT支持精确查找,可以精确定位节点或范围内节点地址来进行通信,如点对点通信、点对点文件传输等功能,在应用丰富程度上表现最佳。Fabric支持智能合约,可以像以太坊一样构建扩展应用,但由于没有 DHT,不支持精确地址点对点通信,应用扩展功能上弱于以太坊。

    展开全文
  • 区块链支付协议介绍

    2019-05-13 18:41:53
    小编在想,区块链支付协议是什么?区块链支付有什么优点?区块链的支付协议的应用是什么?下面小编来介绍一下吧。 区块链的支付协议介绍  1、 区块链的支付协议的定义  指当你的电脑连接到那个IP地址的节点,然后...

     小编在想,区块链支付协议是什么?区块链支付有什么优点?区块链的支付协议的应用是什么?下面小编来介绍一下吧。

    区块链的支付协议介绍

      1、 区块链的支付协议的定义

      指当你的电脑连接到那个IP地址的节点,然后执行一种基本支付协议(该协议会要求收款的节点提供最新的公用密钥),最后直接将支付交易上传至服务器。

      2、 区块链支付的优点

      在基于区块链的支付系统中, 每一个参与方都维护着一份记录所有交易的分类帐的副本。当链上的每一个新区块被网络成员用加密计算机技术挖掘出,该区块中所有交易的有效性得到验证,网络中的每个成员都更新他们的分类帐副本。由于所有各方都有相同的交易记录,因此支付流程更加透明,大大降低了欺诈×××易通过系统的可能性。

      3、 区块链的支付协议的应用

      Pumapay发布的区块链支付协议,主要用于消除在线购物的缺点,让用户常常烦恼的日常物品成本和未经授权的费用度很高等问题得以解决,在以下的场景如商店、餐馆和其他行业的使用。

      在发布的白皮书《行动中的支付协议》中,Pumapay通过3个例子的说明该协议的多种功能。比如一位在线进行预约的的医生能够按时向病人收费,并通过5分钟向客户收取费用,以确保他们有足够的资金。企业可以通过该协议获得更多的收益,因为可以不被信用卡高额费用限制,提高利润,还能够为公众削减价格,为发展而奋斗。Pumapay认为该协议可在金融教育方面提供帮助。

      以上就是区块链支付协议的相关内容,秒链付平台拥有专业的区块链支付的技术人员,运营团队可为您定制各种在线支付解决方案,专注于发展互联网金融与支付相关的产品,如需咨询,请在官网上联系客服。
    原文链接:http://www.mchpay.com/news/198.html

    转载于:https://blog.51cto.com/14323488/2393946

    展开全文
  • 区块链】(二)之传统网络协议

    千次阅读 2018-07-02 16:39:10
    最近在研究区块链,广义的区块链技术,包含点对点网络设计、加密技术应用、分布式算法的实现、数据存储技术的使用方面。也就是说,区块链是点对点传输。我们现在的网络使用的大多是TCP/IP协议,除此之外还有一些其他...

    最近在研究区块链,广义的区块链技术,包含点对点网络设计、加密技术应用、分布式算法的实现、数据存储技术的使用方面。也就是说,区块链是点对点传输。我们现在的网络使用的大多是TCP/IP协议,除此之外还有一些其他类型的网络体系结构,如Novell公司的IPX/SPX、苹果公司的Ap-pleTalk(仅限苹果公司计算机使用)、IBM公司开发的用于构建大规模网络的SNA以及前DEC公司开发的DECnet等。今天我们复习一下这块。

     

    一、计算机网络的发展历程
    1、计算机网络发展

      与其说计算机改变了世界,倒不如说是计算机网络改变了世界。
     

      计算机与网络发展大致经历如下过程:

    2、计算机的模式变化
      起初的计算机主要以“单机”形式存在,计算机之间没有通信可言,而网络的出现才真正让计算机变得与以往的工具不同,信息的共享和交流让计算机成为划时代的产物。网络按照规模可划分为:


    局域网(LAN):局域网是某一区域内由多台计算机互联成的计算机组。一般在几公里范围内。
    广域网(WAN):广域网的范围很大,几十公里到几千公里,可以是一个区域的计算机网也可能是整个国家的计算机网。

      注:我们常见的WLAN是LAN的一种,称为无线局域网。在无线局域网WLAN发明之前,人们要想通过网络进行联络和通信,必须使用物理线缆-铜绞线或光纤进行物理线路连接,但这样的局域网转载和拆卸都很麻烦。随着网络的发展,人民利用射频(Radio Frequency; RF)的技术,使用电磁波进行网络架构,实现了无线局域网互联,让信息随身化。

     

    二、各种协议
      1、协议的重要性

      计算机之间要实现通信,除了技术支持还需要一些规则来进行信息匹配,方能进行交流。不同的厂商生产不同的计算机,其CPU等内部构造不尽相同,就好比两个外国人,那么计算机或者说外国人之间需要实现通信或交流,那么两者之间就需要学会同一种交流规则,对于两个外国人来说,这种交流规则就是语言,而对于计算机来说,这种交流规则就是各种协议。协议的出现让不同厂商之间生产的计算机只要能够支持同一种协议就能实现正常通信,进行交流。

     

      下面是一些以前常用的协议(因为现在基本都是TCP/IP协议):

     

      2、协议的标准:OSI七层模型
      计算机通信诞生之初,系统化与标准化未收到重视,不同厂商只出产各自的网络来实现通信,这样就造成了对用户使用计算机网络造成了很大障碍,缺乏灵活性和可扩展性


    为解决该问题,ISO(国际标准化组织)制定了一个国际标准OSI(开放式通信系统互联参考模型)。


      注:TCP/IP并非ISO指定,是由IETF(国际互联网工程任务组)建议、致力推进标准化的一种协议,其中,大学等研究机构和计算机行业是推动标准化的核心力量,现已成为业界标准协议。协议的标准化也推动了计算机网络的普及。


      ISO对协议进行分层,每个分层可以独立使用,其实系统中某些分层发生变化,也不会影响整个系统,因此可以构造一个扩展性和灵活性都比较强的系统;此外,通过分层可以细分通信功能,更易于单独实现每个分层的协议,界定各个分层的具体责任和义务。

     

      但过分模块化,处理变得更加沉重,以及每个模块都不得不事先相似的处理逻辑等。

    各层功能描述:

     

     

    1.物理层协议:

    负责0、1 比特流(0/1序列)与电压的高低、逛的闪灭之间的转换。规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性;该层为上层协议提供了一个传输数据的物理媒体,只是说明标准。

    在这一层,数据的单位称为比特(bit)(注:bit和字节Byte,我们常说的1字节8位2进制即:1B=8bit)。属于物理层定义的典型规范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45、fddi令牌环网。

    2.数据链路层协议:
    负责物理层面上的互联的、节点间的通信传输(例如一个以太网项链的2个节点之间的通信);该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
    在这一层,数据的单位称为帧(frame)。数据链路层协议的代表包括:ARP、RARP、SDLC、HDLC、PPP、STP、帧中继等。

     

     

     

    3.网络层协议:

    将数据传输到目标地址;目标地址可以使多个网络通过路由器连接而成的某一个地址,主要负责寻找地址和路由选择,网络层还可以实现拥塞控制、网际互连等功能。

    在这一层,数据的单位称为数据包(packet)。网络层协议的代表包括:IP、IPX、RIP、OSPF等。

     

    4.传输层协议(核心层):
    传输层是OSI中最重要、最关键的一层,是唯一负责总体的数据传输和数据控制的一层;
    传输层提供端到端的交换数据的机制,检查分组编号与次序,传输层对其上三层如会话层等,提供可靠的传输服务,对网络层提供可靠的目的地站点信息主要功能。在这一层,数据的单位称为数据段(segment)。主要功能:
    ①:为端到端连接提供传输服务。
    ②:这种传输服务分为可靠和不可靠的,其中Tcp是典型的可靠传输,而Udp则是不可靠传输。
    ③:为端到端连接提供流量控制,差错控制,服务质量(Quality of Service,QoS)等管理服务。
    包括的协议如下:
    TCP:传输控制协议,传输效率低,可靠性强。

    UDP:用户数据报协议,适用于传输可靠性要求不高,数据量小的数据。

     

     

    DCCP、SCTP、RTP、RSVP、PPTP等协议。

     

     

     

    5.会话层协议:

     

    负责建立和断开通信连接(数据流动的逻辑通路),记忆数据的分隔等数据传输相关的管理。

     

    6.表示层协议:

    数据格式转换为标准格式,将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式;主要负责数据格式的转换,确保一个系统的应用层信息可被另一个系统应用层读取。具体来说,就是将设备固有的数据格式转换为网络标准传输格式,不同设备对同一比特流解释的结果可能会不同;因此,主要负责使它们保持一致。

    7.应用层协议:
    ①:超文本传输协议HTTP:这是一种最基本的客户机/服务器的访问协议;浏览器向服务器发送请求,而服务器回应相应的网页。
    ②:文件传送协议FTP:提供交互式的访问,基于客户服务器模式,面向连接 使用TCP可靠的运输服务。主要功能:减少/消除不同操作系统下文件的不兼容性。 
    ③:远程登录协议TELNET:客户服务器模式,能适应许多计算机和操作系统的差异,网络虚拟终端NVT的意义。
    ④:简单邮件传送协议SMTP:Client/Server模式,面向连接。基本功能:写信、传送、报告传送情况、显示信件、接收方处理信件。 
    ⑤:DNS域名解析协议:DNS是一种用以将域名转换为IP地址的Internet服务。
    ⑥:简单文件传送协议TFTP:客户服务器模式,使用UDP数据报,只支持文件传输,不支持交互,TFTP代码占内存小。 
    ⑦:简单网络管理协议(SNMP): SNMP模型的4个组件:被管理结点、管理站、管理信息、管理协议。SNMP代理:运行SNMP管理进程的被管理结点。
    ⑧DHCP动态主机配置协议: 发现协议中的引导文件名、空终止符、属名或者空,DHCP供应协议中的受限目录路径名 Options –可选参数字段,参考定义选择列表中的选择文件。
      PS:其实协议分层只是为了更好地理解我运用协议的作用,而不是绝对的分层,有的层之间协议也是可以共用的,特别是会话层、表示层和应用层这三层。

     

     

     

    三、TCP/IP协议
      1、介绍

      Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议等组成(当然还有其他后来发展起来的网络协议,还包括 ARP,ICMP,IGMP,UDP,以及让域名访问成为可能的DNS,以及电脑/手机可以自动获取IP地址的DHCP。当然还有形形色色的应用层的协议如 HTTP / SMTP / FTP 等。)。TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

      2、TCP/IP协议的发展历程
      (以下内容来自百度百科):

      为了减少网络设计的复杂性,大多数网络都采用分层结构。而TCP/IP协议采用了4层的层级结构。

      在阿帕网(ARPA)产生运作之初,通过接口信号处理机实现互联的电脑并不多,大部分电脑相互之间不兼容。在一台电脑上完成的工作,很难拿到另一台电脑上去用,想让硬件和软件都不一样的电脑联网,也有很多困难。当时美国的状况是,陆军用的电脑是DEC系列产品,海军用的电脑是Honeywell中标机器,空军用的是IBM公司中标的电脑,每一个军种的电脑在各自的系里都运行良好,但却有一个大弊病:不能共享资源。
      当时科学家们提出这样一个理念:“所有电脑生来都是平等的。”为了让这些“生来平等”的电脑能够实现“资源共享”就得在这些系统的标准之上,建立一种大家共同都必须遵守的标准,这样才能让不同的电脑按照一定的规则进行“谈判”,并且在谈判之后能“握手”。
      在确定今天因特网各个电脑之间“谈判规则”过程中,最重要的人物当数瑟夫(Vinton G.Cerf)。正是他的努力,才使今天各种不同的电脑能按照协议上网互联。瑟夫也因此获得了与克莱因罗克(“因特网之父”)一样的美称“互联网之父”。
      瑟夫从小喜欢标新立异,坚强而又热情。中学读书时,就被允许使用加州大学洛杉矶分校的电脑,他认为“为电脑编程序是个非常激动人心的事,......只要把程序编好,就可以让电脑做任何事情。”1965年,瑟夫从斯坦福大学毕业到IBM的一家公司当系统工程师,工作没多久,瑟夫就觉得知识不够用,于是到加州大学洛杉矶分校攻读博士,那时,正逢阿帕网的建立,“接口信号处理机”(IMP)的研试及网络测评中心的建立,瑟夫也成了著名科学家克莱因罗克手下的一位学生。瑟夫与另外三位年轻人(温菲尔德、克罗克、布雷登)参与了阿帕网的第一个节点的联接。此后不久,BBN公司对工作中各种情况发展有很强判断能力、被公认阿帕网建成作出巨大贡献的鲍伯·卡恩(Bob Kahn)也来到了加州大学洛杉矶分校。在那段日子里,往往是卡恩提出需要什么软件,而瑟夫则通宵达旦地把符合要求的软件给编出来,然后他们一起测试这些软件,直至能正常运行。
      当时的主要格局是这样的,罗伯茨提出网络思想设计网络布局,卡恩设计阿帕网总体结构,克莱因罗克负责网络测评系统,还有众多的科学家、研究生参与研究、试验。69年9月阿帕网诞生、运行后,才发现各个IMP连接的时候,需要考虑用各种电脑都认可的信号来打开通信管道,数据通过后还要关闭通道。否则这些IMP不会知道什么时候应该接收信号,什么时候该结束,这就是我们所说的通信“协议”的概念。1970年12月制定出来了最初的通信协议由卡恩开发、瑟夫参与的“网络控制协议”(NCP),但要真正建立一个共同的标准很不容易,72年10月国际电脑通信大会结束后,科学家们都在为此而努力。
      “包切换”理论为网络之间的联接方式提供了理论基础。卡恩在自己研究的基础上,认识到只有深入理解各种操作系统的细节才能建立一种对各种操作系统普适的协议,73年卡恩请瑟夫一起考虑这个协议的各个细节,他们这次合作的结果产生了在开放系统下的所有网民和网管人员都在使用的“传输控制协议”(TCP,Transmission-Control Protocol)和“因特网协议”(IP,Internet Protocol)即TCP/IP协议。
      通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台电脑规定一个地址。1974年12月,卡恩、瑟夫的第一份TCP协议详细说明正式发表。当时美国国防部与三个科学家小组签定了完成TCP/IP的协议,结果由瑟夫领衔的小组捷足先登,首先制定出了通过详细定义的TCP/IP协议标准。当时作了一个试验,将信息包通过点对点的卫星网络,再通过陆地电缆,再通过卫星网络,再由地面传输,贯串欧洲和美国,经过各种电脑系统,全程9.4万公里竟然没有丢失一个数据位,远距离的可靠数据传输证明了TCP/IP协议的成功。
      1983年1月1日,运行较长时期曾被人们习惯了的NCP被停止使用,TCP/IP协议作为因特网上所有主机间的共同协议,从此以后被作为一种必须遵守的规则被肯定和应用。2005年9月9日卡恩和瑟夫由于他们对于美国文化做出的卓越贡献被授予总统自由勋章。
      3、TCP/IP四层模型

     

    四、IP协议
      1、介绍

      IP协议(Internet Protocol)是将多个包交换网络连接起来,它在源地址和目的地址之间传送一种称之为数据包的东西,它还提供对数据大小的重新组装功能,以适应不同网络对包大小的要求。IP协议在OSI参考模型中应用于网络层,以“数据包(Package)”为单位。其中,IP地址的定义是确认唯一端口号和路由选择的关键,IP地址相当于每台电话的电话号码,唯一且是我们互相联系的关键,因此IP协议也是网络互连的关键。


      2、IP协议特点
    ①IP协议是一种无连接、不可靠的分组传送服务的协议。
    ②IP协议是点-点线路的网络层通信协议。IP协议是针对原主机-路由器、路由器-路由器、路由器-目的主机之间的数据传输的点-点线路的网络层通信协议。
    ③IP协议屏蔽了网络在数据链路层、物理层协议与实现技术上的差异。:通过IP协议,网络层向传输层提供的是统一的IP分组,传输层不需要考虑互联网在数据链路层、物理层协议与实现技术上的差异,IP协议使得异构网络的互联变得容易了。
      3、IPV4和IPV6
      目前,主流IP是基于IPv4的,但IPV4网络难以实现网络实名制,一个重要原因就是因为IP资源的共用,因为IP资源不够(IPV4为32位),所以不同的人在不同的时间段共用一个IP,IP和上网用户无法实现一一对应。而IPv6(128位,足够长)的普及将改变现状,因为IPv6一个重要的应用将是实现网络实名制下的互联网身份证/VIeID,在IPv4下,现在根据IP查人也比较麻烦,电信局要保留一段时间的上网日志才行,通常因为数据量很大,运营商只保留三个月左右的上网日志,比如查前年某个IP发帖子的用户就不能实现。IPv6的出现可以从技术上一劳永逸地解决实名制这个问题,因为那时IP资源将不再紧张,运营商有足够多的IP资源,那时候,运营商在受理入网申请的时候,可以直接给该用户分配一个固定IP地址,这样实际就实现了实名制,也就是一个真实用户和一个IP地址的一一对应。当一个上网用户的IP固定了之后,你任何时间做的任何事情都和一个唯一IP绑定,你在网络上做的任何事情在任何时间段内都有据可查,并且无法否认。因此你可能昨晚刚浏览过非法网站后,第二天早上就会有人上门给你开罚款单(啧啧)。
      IPv4,是互联网协议(Internet Protocol,IP)的第四版,也是第一个被广泛使用,构成现今互联网技术的基础的协议。1981年 Jon Postel 在RFC791中定义了IP,Ipv4可以运行在各种各样的底层网络上,比如端对端的串行数据链路(PPP协议和SLIP协议) ,卫星链路等等。局域网中最常用的是以太网。目前的全球因特网所采用的协议族是TCP/IP协议族。IP是TCP/IP协议族中网络层的协议,是TCP/IP协议族的核心协议之一。目前IP协议的版本号是4(简称为IPv4,v,version版本),它的下一个版本就是IPv6。

      数据报格式如下:首部的长度是以4个字节为单位,长度可以是20-60字节,这跟首部的HLEN字段有关。

        

    1.首部长度:这个4位字段定义了数据报首部的长度,以4字节的字为单位。当首部没有选项时,首部长度位20字节;当这个字段值位最大值F时,首部长度最大为60字节。
    2.服务类型:在最初这个字段有一部分用于定义数据报的优先级,剩下的一部分定义了服务类型。IETF已经改变了这个8位字段的解释,现在定义了一组区分服务。在这种解释种,前6位构成了码点(codepoint),最后两位未使用。当码点字段最右边的3位不全为0时,这6位定义了54种服务,低延时,高吞吐量等等。
    3.总长度:这个16位字段定义了数据报总长度,其以字节为单位。故IPv4数据报总长度上限值位65536字节。注:为什么需要这个字段?在许多情况下,我们确实不需要这个字段值。但是有些情况下,封装在一个帧里的并不仅仅是数据报,还可能附加了一些填充。比如,以太网协议对帧的数据有最大值(1500字节)和最小值(46字节)的限制,当数据小于46字节时,数据将含有填充数据。
    4.标识(identification): 这个16位字段标志了从源主机发出的一个数据报,这样就确定了数据报的唯一性。这样使得数据报被分片后,在到达终点时终点能根据标识号将同一个数据报的分片重新组装成一个数据报。
    5.标志(flag):第一位保留(未用),第二位为“不分片(do not fragment)”,第三位位“还有分片(more fragment)”。
    6.分片偏移:这个13位字段表示的是分片在整个数据报中的相对位置。这是数据在原始数据报中的偏移量,以8字节位单位。
    7.生存时间:这个8位字段用来控制数据报所经过的最大跳数(路由器),每经过一个路由器,这个字段数值都减1,减1后变位0时,路由器就丢弃这个数据报。
    8.协议:这个8位字段定义了使用IPv4服务的高层协议,如TCP,UDP,ICMP,IGMP,OSPF等的数据都将被封装到IP数据报中。这个字段指明数据报必须交付给哪个最终目的协议。
    9.检验和:检验IP数据报首部。
    10.源地址:定义了源点的IP地址,这个字段始终保持不变。

    11.目的地址:定义了终点的IP地址,这个字段始终保持不变。

      IPV4地址格式:
      IPv4中规定IP地址长度为32(按TCP/IP参考模型划分) ,即有2^32-1个地址。 ipv4所存在的问题 一般的书写法为4个用小数点分开的十进制数。也有人把4位数字化成一个十进制长整数,但这种标示法并不常见。另一方面,IPv6使用的128位地址所采用的位址记数法,在IPv4也有人用,但使用范围更少。 过去IANAIP地址分为A,B,C,D 4类,把32位的地址分为两个部分:前面的部分代表网络地址,由IANA分配,后面部分代表局域网地址。如在C类网络中,前24位为网络地址,后8位为局域网地址,可提供254个设备地址(因为有两个地址不能为网络设备使用: 255为广播地址,0代表此网络本身) 。网络掩码(Netmask) 限制了网络的范围,1代表网络部分,0代表设备地址部分,例如C类地址常用的网络掩码为255.255.255.0。
    IPv6:
      由于IPv4最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍。IPV6号称可以为全世界的每一粒沙子编上一个网址。

      发展历史:2003年1月22日,IETF发布了IPv6测试性网络。最初开始于虚拟网络,它使用IPv6-over-IPv4隧道过渡技术。因此,它是一个基于IPv4互联网且支持IPv6传输的网络,后来逐渐建立了纯IPv6链接。从2011年开始,主要用在个人计算机和服务器系统上的操作系统基本上都支持高质量IPv6配置产品。例如,Microsoft Windows从Windows 2000起就开始支持IPv6,到Windows XP时已经进入了产品完备阶段。一些应用基于IPv6实现.如BitTorrent点到点文件传输协议等,避免了使用NAT的IPv4私有网络无法正常使用的普遍问题。2012年6月6日,国际互联网协会举行了世界IPv6启动纪念日,这一天,全球IPv6网络正式启动。多家知名网站,如Google、Facebook和Yahoo等,于当天全球标准时间0点(北京时间8点整)开始永久性支持IPv6访问。


      IPV6地址格式:

      IPv6的地址长度为128b,是IPv4地址长度的4倍。于是IPv4点分十进制格式不再适用,采用十六进制表示。IPv6有3种表示方法。

    冒分十六进制表示法:
    格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16b,以十六进制表示,例如:ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,这种表示法中,每个X的前导0是可以省略的,例如:2001:0DB8:0000:0023:0008:0800:200C:417A→ 2001:DB8:0:23:8:800:200C:417A。
    0位压缩表示法:
    在某些情况下,一个IPv6地址中问可能包含很长的一段0,可以把连续的一段0压缩为“::”。但为保证地址解析的唯一性,地址中”::”只能出现一次,例如: 
    FF01:0:0:0:0:0:0:1101 → FF01::1101 
    0:0:0:0:0:0:0:1 → ::1 
    0:0:0:0:0:0:0:0 → ::
    内嵌IPv4地址表示法:
    为了实现IPv4-IPv6互通,IPv4地址会嵌入IPv6地址中,此时地址常表示为:X:X:X:X:X:X:d.d.d.d,前96b采用冒分十六进制表示,而最后32b地址则使用IPv4的点分十进制表示,例如::192.168.0.1与::FFFF:192.168.0.1就是两个典型的例子,注意在前96b中,压缩0位的方法依旧适用。

     

      IPV6报文格式:

     

     

    五、TCP协议

     

     

      1、介绍

     

      TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的, 基于IP的传输层协议。TCP在IP报文的协议号是6。TCP是一个超级麻烦的协议,而它又是互联网的基础。下面是OSI七层模型图:

     

    TCP工作在网络OSI的七层模型中的第四层——Transport层(传输层),IP在第三层——Network层,ARP 在第二层——Data Link层。在第二层的数据,我们把它叫Frame(数据帧),在第三层的数据叫Packet(数据包),第四层的数据叫Segment(数据段)。 同时,我们需要简单的知道,数据从应用层发下来,会在每一层都会加上头部信息,进行封装,然后再发送到数据接收端。所以数据的发送和接收其实就是数据的封装和解封装的过程。 

     

      2、TCP报文格式

     

    如上图所示,TCP数据格式是由若干具有特殊含义字段组成的。其中,


    Source Port和Destination Port:分别占用16位,表示源端口号和目的端口号;用于区别主机中的不同进程, 而IP地址是用来区分不同的主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能唯一 的确定一个TCP连接;
    Sequence Number:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据 字节在数据流中的序号;主要用来解决网络报乱序的问题;
    Acknowledgment Number:32位确认序列号包含发送确认的一端所期望收到的下一个序号,因此,确认序号应 当是上次已成功收到数据字节序号加1。不过,只有当标志位中的ACK标志(下面介绍)为1时该确认序列号的字 段才有效。主要用来解决不丢包的问题;
    Offset:给出首部中32 bit字的数目,需要这个值是因为任选字段的长度是可变的。这个字段占4bit(最多能 表示15个32bit的的字,即4*15=60个字节的首部长度),因此TCP最多有60字节的首部。然而,没有任选字段, 正常的长度是20字节;
    TCP Flags:TCP首部中有6个标志比特,它们中的多个可同时被设置为1,主要是用于操控TCP的状态机的,依次 为URG,ACK,PSH,RST,SYN,FIN。
    URG:此标志表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并且督促 中间层设备要尽快处理这些数据;
    ACK:此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1, 为1的时候表示应答域有效,反之为0;
    PSH:这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序, 而不是在缓冲区中排队;
    RST:这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包;
    SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1, ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送 一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口;但是由于这 种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全 的主机将会强制要求一个连接严格的进行TCP的三次握手;

    Window:窗口大小,也就是有名的滑动窗口,用来进行流量控制。这是一个复杂的问题,本文不再论述。

     

     

      3、TCP协议的三次握手

     

      TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。在TCP/IP协议中,TCP 协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP窗口大小信息。如下图TCP的通信过程所示:

     

    三次握手具体过程(状态)如下(其实可以类比打电话的过程:甲打电话,并等待接听→乙收到来电显示,“并表示可以接听”→“甲收到乙可以接听的信息”,甲接听电话。注:引号部分是打电话过程中没有的,但在TCP三次握手中存在):


    第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认。(客户的建立连接并等待确认)


    第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态。(服务器端发送相关报文段信息并等待连接)


    第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。(客户的接收到服务端信息并实现连接)


      然后,客户端和服务端就能实现正常的数据传输啦!


      4、TCP协议的四次分手
       既然握手都需要频繁确认,那么“分手”又怎能马虎呢?具体过程(状态)如下(同样也可以看做挂电话的过程:我说完了,挂?→我也说完了,挂吧?→好,拜拜→bye。简言之就是确认通信双方都交流完毕再确认断开连接):


    第一次分手:主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了。(一方数据发送完成)
    第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我也没有数据要发送了,可以进行关闭连接了。(另一方数据发送完成)
    第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入CLOSE_WAIT状态。(请求关闭连接并等待)
    第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。(关闭连接)
      现在,我们也应该理解为什么TCP协议是面向连接的、可靠的、基于IP协议的“通信控制协议”了。TCP的三次握手保证了数据的可靠性,保证资源不被浪费,而四次分手保证连接的可靠性而不至于随意断开连接,但TCP协议也由其可靠性,数据传输效率变得较低,而不像UDP那样进行实时快速传输,下面我们就来学习什么是UDP协议。


    六、UDP协议
      1、介绍

      UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。


      与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节(16*4位)用来包含报头信息,剩余字节则用来包含具体的传输数据。


      2、UDP报文格式

      与TCP协议不同,UDP协议是非面向连接的不可靠协议,因此没有了SYN等处理两端等待或连接的报文段,相比之下,UDP的报文格式更为简单,主要由报文头(由均16位的源端口号、目的端口号、UDP长度和UDP校验和组成)和具体传输数据组成。如图所示:

    UDP长度:UDP报文的整个大小,最小为8个字节(16*4位)(仅为首部)。
    UDP检验和:在进行检验和计算时,会添加一个伪首部一起进行运算。伪首部(占用12个字节)为:4个字节的源IP地址、4个字节的目的IP地址、1个字节的0、一个字节的数字17、以及占用2个字节UDP长度。这个伪首部不是报文的真正首部,只是引入为了计算校验和。相对于IP协议的只计算首部,UDP检验和会把首部和数据一起进行校验。接收端进行的校验和与UDP报文中的校验和相与,如果无差错应该全为1。如果有误,则将报文丢弃或者发给应用层、并附上差错警告。
      3、UDP特性
    (1) UDP是一个无连接协议,传输数据之前源端和终端不建立连接,当 UDP想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。
    (2) 由于传输数据不建立连接,因此也就不需要维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息。
    (3) UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
    (4) 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
    (5)UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态表(这里面有许多参数)。
    (6)UDP是面向报文的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。 虽然UDP是一个不可靠的协议,但它是分发信息的一个理想协议。例如,在屏幕上报告股票市场、在屏幕上显示航空信息等等。UDP也用在路由信息协议RIP(Routing Information Protocol)中修改路由表。在这些应用场合下,如果有一个消息丢失,在几秒之后另一个新的消息就会替换它。UDP广泛用在多媒体应用中,例如,Progressive Networks公司开发的RealAudio软件,它是在因特网上把预先录制的或者现场音乐实时传送给客户机的一种软件,该软件使用的RealAudio audio-on-demand protocol协议就是运行在UDP之上的协议,大多数因特网电话软件产品也都运行在UDP之上。
      在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议。


    七、TCP协议和UDP协议的区别
      1、一般区别

    TCP是面向连接的,传输数据保证可靠性和安全性;TCP协议是非面向连接的,是不可靠但高效率的协议。
    TCP占用资源多而UDP占用少。
    TCP是流模式而TCP是数据报模式。(可以这样理解:TCP是面向连接的,用打电话的过程来类比,就是通信双方是互相明确的,所以进行的是“你一句我一句”的交流,TCP整个通信过程间有一个缓存区,由于通信主体明确,因此可以断断续续地进行交流,数据好比水流,知道源头和目的地,因此称为流模式。反过来,UDP是非面向连接的,好比写信的过程,假设我们只要知道佩奇的地址,我们就能写信给佩奇,而佩奇却不认识我们。这样发起通信方的身份是不明确的,每个发送端的信息都不能和别的发送端混淆,不然会造成数据失效,所以UDP要对数据进行“打包”发送,是面向报文的,就像写信需要用信封套起来,不然只发送数据甚至数据混合会变得毫无意义,就像qq群的匿名聊天,这不扯皮吗?)
    TCP和UDP的应用场景和编程方式也有很大差别,此处不再赘述。
      2、TCP的粘包和UDP的丢包
       TCP粘包现象:TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

      粘包原因:

    发送端:
    TCP默认会使用Nagle算法。而Nagle算法主要做两件事:1)只有上一个分组得到确认,才会发送下一个分组;2)收集多个小分组,在一个确认到来时一起发送。所以,正是Nagle算法造成了发送方有可能造成粘包现象。
    接收端:TCP接收到分组时,并不会立刻送至应用层处理,或者说,应用层并不一定会立即处理;实际上,TCP将收到的分组保存至接收缓存里,然后应用程序主动从缓存里读收到的分组。这样一来,如果TCP接收分组的速度大于应用程序读分组的速度,多个包就会被存至缓存,应用程序读时,就会读到多个首尾相接粘到一起的包。
      粘包处理:如果黏在一起的包是同一个整体,即同意部分数据分割而来的,那么就不用进行处理。如果是不同部分的数据粘到一起,就需要进行粘包解决:


    发送端导致:使用TCP_NODELAY选项来关闭Nagle算法。
    接收端导致:暂无。
    统一解决(应用层):可以解决接收方造成的粘包问题,还能解决发送方造成的粘包问题。
    解决方法就是循环处理:应用程序在处理从缓存读来的分组时,读完一条数据时,就应该循环读下一条数据,直到所有的数据都被处理;但是如何判断每条数据的长度呢?
    两种途径:
      1)格式化数据:每条数据有固定的格式(开始符、结束符),这种方法简单易行,但选择开始符和结束符的时候一定要注意每条数据的内部一定不能出现开始符或结束符;
           2)发送长度(推荐):发送每条数据的时候,将数据的长度一并发送,比如可以选择每条数据的前4位是数据的长度,应用层处理时可以根据长度来判断每条数据的开始和结束。
      UDP丢包现象:丢包现象即使用UDP发送时,由于不可靠连接方式,收到各种因素影响,数据包可能会在接受过程中丢失一部分,从而导致数据不完整。

      
    UDP丢包原因:
    发送端:发送的包太大导致send方法无法正常切割为小包导致丢包、发送的包太大超过缓存设置也会出现对包、发送频率太快导致接收端未接受或溢出缓冲区而丢包。
    接收端:处理时间过长导致丢包。
    其他:网络等问题。
      UDP丢包处理:
    UDP的缺陷在于丢包和乱序问题,一般视情况进行处理,而发送的时候也需要注意上述导致丢包的问题。
    八、HTTP协议
       1、介绍
      超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的万维网WWW(World Wide Web)文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。


      HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。


      HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。

     

     

    2、HTTP特点
      HTTP是一个客户端和服务器端请求和应答的标准,通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行。 HTTP协议的网页 HTTP协议的网页 HTTP使用TCP而不是UDP的原因在于(打开)一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。


      通过HTTP或者HTTPS协议(HTTP协议+SSL协议)请求的资源由统一资源标示符(Uniform Resource Identifiers)(或者,更准确一些,URLs)来标识。HTTP有以下特点:


    简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。


    灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
    无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
    无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
    支持B/S及C/S模式。
      3、HTTP的URL地址
      URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息,URL,全称是UniformResourceLocator, 中文叫统一资源定位符,是互联网上用来标识某一处资源的地址。以下面这个URL为例,介绍下普通URL的各部分组成:


      http://www.cnblogs.com:8080/fzz9/index.jsp?id=30303&page=2#name


    协议部分:一般为HTTP或Https,后接//作为分隔符。
    域名部分:www.cnblogs.com为网站域名。
    端口号部分:此网址为8080。跟在域名后面的是端口号,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口。


    虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。
    参数部分:从“?”开始到“#”为止之间的部分为参数部分。本例中的参数部分为“id=30303&page=2”。不是必要部分。
    文件名部分:从域名后的最后一个“/”开始到后面一个“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.jsp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名。
    锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分。
      4、HTTP请求之request

      客户端通过HTTP协议进行请求时遵循一定的格式,请看下面的请求报文格式(由请求行、请求头、空行、请求体组成):

    而各部分组成如下所示:

    而请求主要分为post提交方法和get提交方法,每种选择各有优缺点,此处不再赘述。目前大多数网站多采用post提交。


      5、Http响应之response

      在客户端发送请求后服务端进行响应,将信息发送给客户端,以实现功能服务,报文格式如下(包含状态行、响应头、空行、消息体):

    响应组成此处也不再赘述,值得注意的是状态码,它以清晰明确的数字告诉客户端本次请求的处理结果。 常见的状态码有:

    九、Socket编程简述
      Socket的英文原义是“孔”或“插座”。网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。


      建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。


      HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。


      网络层的ip地址可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。 使用TCP/IP协议的应用程序通常采用应用编程接口,即Socket(UNIX  BSD的套接字(socket)和UNIX System V的TLI,已经被淘汰),来实现网络进程之间的通信。

     

    这里只是简单介绍哈socket,详细的以后写文章描述

    参考转载:http://www.cnblogs.com/fzz9/p/8964513.html

    展开全文
  • 本讲详细讲述了SSL协议中的数据加密的过程,数字证书、对称加密、非对称加密和SSL握手过程等概念。 1 SSL 只要你听过HTTPS,不可能没听过SSL协议吧,SSL协议是一种安全协议。对于互联网协议没有了解的童鞋...
  • 去年,比特币暴涨,其他币也像雨后春笋一样冒出来,已经有1000...这些问题的答案,我也想知道,就花了很多时间查阅资料、研究协议。前两周发表的《区块链入门教程》和《比特币入门教程》,是我的学习心得。但是,...
  • 大家都知道,区块链的关键技术组成主要为:P2P网络协议、共识机制、密码学技术、账户与存储模型。而这些技术中,又以 密码学与共识机制 这两点为最核心。那么今天我们来详细的聊一聊密码学,看一看密码学技术是如何...
  • #资源达人分享计划#
  • 加密货币:crypto-currency 1. 哈希函数特性 ① collision resistance 抗碰撞性: a) collision 指哈希碰撞: 两个不同的值经哈希函数结果相等 X≠Y => H(X) = H(Y) b) collision resistence: 没有高效...
  • #资源达人分享计划#
  • #资源达人分享计划#
  • #资源达人分享计划#
  • #资源达人分享计划#
  • 区块链学习——区块链分类

    千次阅读 2018-04-21 16:08:46
    摘要在我的区块链上一篇博文中,简单介绍了区块链的架构,链接:区块链学习——区块链架构。那么本文我将继续简单介绍一下区块链的分类。根据网络范围根据网络范围,区块链可以分为公有链、私有链、联盟链。1.公有链...
  • 区块链学习笔记(初识区块链

    千次阅读 多人点赞 2019-08-05 12:38:52
    区块链 区块链比比特币更加迷人,区块链具有革命性的意义,它是一个创造信任的机器 AI是生产力的提升,区块链是生产关系的变更,可能使人类的生产结构产生重大变革,淡化国家的权利机构 比特币按字节数收费 一.发展...
  • 区块链加密货币

    千次阅读 2021-09-05 18:06:14
    区块链加密货币 对区块链加密货币做了下简单研究,这里记录下。 区块链的目的 公共账本,降低交易中的信任成本 公共账本中,如何验证一笔交易是否是交易双方的真实意愿,而非伪造的交易? 电子签名。 电子签名...
  • #资源达人分享计划#
  • Bifrost项目是Scala客户端,它是根据加密货币/区块链协议设计的,旨在实现三个特定目标: 促进资本从发达经济体的投资者向发展中经济体的企业转移和投资 创建一个商品市场,通过存储和赎回来抵押稳定的货币 建立...
  • #资源达人分享计划#
  • 来源 | Crushcrypto编译 | 火火酱责编|Carol出品 | 区块链大本营(blockchain_camp)大家都知道,区块链是比特币的底层技术,但区块链...
  • #资源达人分享计划#
  • 矿工和用户的均衡行为针对外部区块链协议指标进行了表征。 本文表明,从长远来看,可以实现矿工与用户之间的平衡。 较高的固定挖矿奖励是当前加密货币设计不稳定的原因。 均衡模型具有两个关键含义:首先,在工作量...
  • 区块链系列」区块链技术与应用

    千次阅读 2020-03-03 09:01:02
    P1 Linux下Go安装 P2 搭建go-ethereum P3 搭建区块链底层技术 P4 区块链技术与应用 P5 搭建Fabric(实践中),...我首选的视频课程,肖教授的演讲公开课《区块链技术与应用》,课程内容讲述区块链原理和概念等,...
  • 目录:第01阶段-区块链技术理论入门基础(本阶段即将下架更新,可略过不看)第02阶段-区块链技术研发入门到精通(2017年底更新)第03阶段-区块链技术实战教程(2018年更新)第04阶段-区块链实战超级账本(2018年更新)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,576
精华内容 8,630
关键字:

区块链加密协议