精华内容
下载资源
问答
  • 绝大多数人没搞懂的思科VTP修剪原理

    千次阅读 多人点赞 2019-02-25 07:38:13
    作为一名技术人、老IT图书作者,一直秉持着一个习惯,那就是喜欢“深入背后”,发现大多数人不知道的“秘密”,因为这些才是真正的“干货”。正因如此,每个领域都会许多“Why”要去找答案,但在国内是很难找到的,...

    作为一名技术人、老IT图书作者,一直秉持着一个习惯,那就是喜欢“深入背后”,发现大多数人不知道的“秘密”,因为这些才是真正的“干货”。正因如此,每个领域都会许多“Why”要去找答案,但在国内是很难找到的,有的仅是一些人云亦云,连作者自己都不知道说什么的肤浅,甚至是错误的论述。看这类图书或文章,问一万个“为什么”都还嫌少。

    这里就举一个实例,就是关于Cisco自己的私有协议VTP中的VTP修剪功能。网上介绍这一功能的文章大把,几乎所有Cisco设备图书也都介绍了这一功能,但很遗憾几乎没有看到正确介绍了这一功能的作用和工作原理的图书或文章。不信,如果你学了这项技术,你自己问一下自己,你知道答案吗?相信至少90%的人答不上,或者连自己都没理解的书上或网上说法。最根本原因就是Cisco自己的官方文档是英文的,而且这方面的原理介绍实在是太简单,真正的理解就全靠自己摸索了。PS一句,思科官网上的错误也比较多,特别是一些命令格式输入不严谨,明明是可选的,但从格式上看却是必选的。这对于初学者来说是很难发现的。

    1. VTP修剪与Trunk VLAN许可的区别

    说到VTP修剪就很容易与Trunk端口的VLAN许可搞混,甚至认为是一样的,因为表面上看它们都是基于VLAN的许可。其实两者的引入背景,或者说出发点是根本不一样的。

    引入VTP修剪功能的出发点是为了限制对于邻居交换机来说没有意义的广播、组播和未知单播流量在中继链路上传输,以节省中继链路的带宽使用,因为交换机上根本没有在这些VLAN中的设备(交换机上没有任何端口的Native VLAN,或者Default VLAN是该VLAN),所以最终这些没有意义的泛洪流量也会在邻居交换机上被丢弃。而引入Trunk VLAN许可功能的目的就是明确规定哪些VLAN中的帧可以在当前中继链路上通过,哪些不可以通过,但其出发点不是为了节省中继教链路的带宽使用,而是为了限制设备或用户间的通信(包括各种通信)。

    尽管这两者最终的结果是被限制的VLAN中的帧都不能通过所在中继链路,但VTP修剪实际上仅作用于广播、组播和未知单播之类的泛洪流量,因为此时邻居交换机上没没有连接对应VLAN中的设备,不存在该VLAN内部的单播通信。相反,如果邻居交换机连接了某VLAN中的设备,则该VLAN又不能在连接该交换机的Trunk接口上被VTP修剪。而Trunk端口的VLAN许可是直接进行限制,而且是针对这些VLAN中的各种通信流量。

    2. VTP修剪功能的工作原理

    那问题又来了,为什么邻居交换机上没有连接到位于VLAN的设备,却有该VLAN中的流量发往该交换机呢?这就又涉及到VTP的功能了。VTP是用来做什么的?是用来在交换网络上进行动态VLAN注册的,类似于通用的GVRP协议。启用了VTP功能后,VTP客户交换机上的VLAN配置就可以与VTP服务器上的VLAN配置保持同步,即使某个客户交换机上根本没有连接位于某VLAN中的设备。也就是很可能在VTP客户交换机上创建了许多根本不需要的VLAN。

    如图1所示,VTP服务器SwitchB上创建了VLAN 2~5,共4个VLAN。假设各交换机所连接的设备仅位于图中所示的VLAN中。SwitchA和SwitchC根本没有连接位于VLAN 4~5中的设备,所以这两台交换机上实际上也不需要注册这两个VLAN,但VTP的VLAN动态注册是不能限制的,所以SwitchA和SwitchC同样仍有VLAN 2~5这4个VLAN。可通过执行show vlan brief特权模式命令查看,如图2所示。

    很多人没搞懂的思科VTP修剪原理                             

                                                 图1 VTP修剪配置示例拓扑结构

    很多人没搞懂的思科VTP修剪原理

                               图2 VTP客户交换机动态创建的VLAN

    如果仅是VLAN创建还没多大影响,因为没有位于这些VLAN的用户的话,也就不存在这些VLAN内部的单播通信。但是对于广播、组播、未知单播通信,它们不是从特定的路径发给特定的用户,而是会从所有允许这些VLAN通过的Trunk链路上以泛洪方式向邻居交换机发送,即使这些交换机根本没有位于这些VLAN中的设备。最终的结果就是这些交换机在Trunk端口上收到这些流量后直接丢弃。但这些无用的流量在到达到邻居交换机前还是占用了Trunk链路带宽的,造成了带宽浪费。

    启用了VTP修剪功能后,以上问题就可以得到有效解决,因为VTP修剪功能会自动根据邻居交换机是否有成员端口分配到该VLAN来决定是否向此邻居交换机发送该VLAN中的流量(其实是同时包括单播和泛洪流量的,只是邻居交换机上没有位于某VLAN中的设备时,就不会存在该VLAN内的单播流量通过,所以实际上只可能有泛洪流量),以实现对某些VLAN中的泛洪流量进行修剪。

    交换机如何获知邻居交换机上是否存在有某VLAN中的成员端口呢?这也是VTP中的功能,就是要启用了VTP协议后,当交换机上的VLAN有加入的成员端口(真正加入,不是仅允许通过)时,它会向邻居交换机发送通告(Advertisement)消息,向上游邻居交换机通知它自己在该VLAN上活动的端口,即所加入的成员端口。这些信息随后由上游邻居交换机存储,并用于决定是否应该通过中继端口将VLAN中的泛洪通信转发到交换机。

    3. VTP修剪资格列表

    默认情况下,在全局启用了VTP修剪功能后,邻居交换机上已动态创建,但所有无成员端口的VLAN中的泛洪量都将被修剪,不允许向该邻居交换机发送。

    如在图1中的示例中,仅在VTP服务器SwitchB上创建了VLAN 2~5,所以VTP服务器向VTP客户交换机上传播的也是这4个VLAN的注册信息,在VTP客户交换机SwitchA和SwitchC上自己创建了这4个VLAN,如图2所示。

    但因为SwitchA上没有加入VLAN 3~5的端口(只有E0/2端口加入VLAN 2),所以SwitchB连接SwitchA的E0/1接口上的VTP资格列表是VLAN 3~5,而SwitchC上没有加入VLAN 2、4~5的端口(只有E0/2端口加入VLAN 3),所以SwitchB连接SwitchC的E0/2接口上的VTP资格列表是VLAN 2、4~5。执行show interface pruning命令可以查看,如图3所示。

    很多人没搞懂的思科VTP修剪原理

                                         图3 默认的VTP修剪资格列表

    在实际配置中,管理员还可针对具体的Trunk端口(可以在VTP客户交换机上,但更多是在VTP服务器上)进行VTP修剪资格列表配置,手工指定允许进行修剪的VLAN,即修剪资格列表。位于这个列表中的VLAN中的泛洪流量都将不再通过该Trunk接口对应的链路向邻居交换机发送,不在这个列表中的VLAN中的泛洪流量仍然可以向邻居交换机发送,尽管该邻居交换机也没有成员端口分配到这些VLAN中。但是一定要注意,在配置修剪资格列表时,其中包括的VLAN必须是所连邻居交换机上没有分配成员端口的VLAN,否则即使加入了修剪资格列表也起不到泛洪流量修剪的作用。可以修剪的VLAN范围为VLAN 2~1001,VLAN 1、VLAN 1002~1005,以及扩展范围VLAN均不能被修剪。

    图4是对VTP服务器SwitchB的E0/1和E0/2接口修改了VTP修剪列表后VTP修剪资格列表。

    很多人没搞懂的思科VTP修剪原理

                                               图4 手工修改的VTP资格列表

    至于最终效果的验证,可以在设备上抓包,如ARP广播包,看在启用了VTP修剪后,某些VLAN中设备发出的ARP请求包是否还可以通过Trunk链路向邻居交换机传输。

    以上仅主要就VTP修剪功能、修剪原理,以及修剪资格列表配置作了比较具体的介绍,当然VTP协议还涉及到许多更深层次的工作原理,如VTP通告、VTP消息内容和格式、VTP协议交互等,在此就不作具体介绍,因为这涉及到太多内容了,具体在我的会员视频课程中有详细介绍,想要深入了解的,请关注我,并私信咨询。

    本公司有国内唯一全面包括华为、H3C和Cisco三大主流品牌的超系统、超实战视频课程(共1200小时以上,1000个以上实战实验),在CSDN学院上的课程中心地址为https://edu.csdn.net/lecturer/74 ,欢迎试听、选购,有问题可以加学员交流QQ群:398772643 ,或加微信windanet咨询。

     

    展开全文
  • 简述 在 SAP S/4 的开发环境(DEV) 质量保证环境(QAS) 使用...本文介绍了一种针对特定的事务码,产生请求的方法,相关操作在 S/4 HANA 1709 下验证通过。 发生原因 一般来说,除开发环境外,其它环境是禁止配置...

    简述

    在 SAP S/4 的开发环境(DEV) 质量保证环境(QAS) 使用一些事务码时,系统会要求产生传输请求

    这种机制在绝大多数情况下,能保证开发、QAS、生产环境的一致性,但对于一些确实需经常修改的事务码,会造成使用不便的问题

    本文介绍了一种针对特定的事务码,不产生请求的方法,相关操作在 S/4 HANA 1709 下验证通过。

    发生原因

    一般来说,除开发环境外,其它环境是禁止配置的,一般BASIS 会使用SCC4,将这些集团(Client) 设置为 不允许修改(No Changes allowed),那么在使用需产生请求的事务码时,系统会提示“客户 XXX 有“不可修改的状态 (Client xxx has status 'not modifiable')”;

    这种情况下,需联系BASIS将该集团设置为“不带自动记录的更改”或“自动记录修改”,然后才可以使用这些事务码修改数据并产生请求(或不产生请求,取决于SCC4的配置);

    但这种操作对用户来说并不方便,也增加了BASIS不必要的工作量,此外在SCC4开放期间,若有人不小心/不自觉修改了配置或程序,会导致各环境配置/代码不一致的情况。

     

    配置方法

    首先我们需要知道这个事务码对应的表,以OB52为例,选择“起始科目”一列,通过“技术信息”可查到表名为 V_T001B_COFIB 

    使用事务码"SE54",输入表/视图 "V_T001B_COFIB",在“编辑表/视图”一栏,选择"已生成的对象",然后点击按钮"创建/更改",忽略弹出的警告窗口。

    Tips:有时有些表找不到对应的生成对象,如事务码 OPS6/OPS7 对应的表 V_TCJ04 和 V_TCJ05,这种情况下,可以用SE11查看这两个视图,会发现他们来自表 TCJ04 和 TCJ05,用事务码SE54,按表名 TCJ04/TCJ05 去查找已生成的对象 

    将记录例程 改为 “不,或用户,记录例程”,使得对于该表的修改无需产生请求,然后保存

    可以测试一下,大多数的事务码此时可无视传输和不可修改的限制,愉快的进行修改了,但有些事务码还不可以,需要进一步做如下配置:

    使用事务码 SOBJ ,点击维护,忽略跨客户端警告窗口

    使用下方的“定位...”,定位到 对应的表/视图,双击打开

    然后检查 “对象属性”一栏,是否勾选了“当前设置”,如果没有,勾选上,然后保存,产生请求(建议设置为本地请求)

    经过这种设置后,SE54 中的配置就可以生效了。

     

    特殊说明-费用分配分摊相关

    按 Note #2469721的说明,对于费用分配分摊相关事务码(KSU1, KSV1, KSU2, KSV2, KSW1, KSW2, KSU7, KSU8, KSV7, KSV8, KSC1, KSC2, KSU5, KSUB, KSV5, KSVB, KSW5, KSWB, KSC5, KSCB, KEU5, KEUB, GA15, GA35, GA2B, GA4B, CPP5, CPPB, CPC5, CPCB, FAGLGA11, FAGLGA12, FAGLGA13, FAGLGA14, FAGLGA27, FAGLGA28, FAGLGA29, FAGLGA31, FAGLGA32, FAGLGA33, FAGLGA34, FAGLGA47, FAGLGA48, FAGLGA49, FAGLGA4A),有个统一的开关进行控制;

    在表 "T811FLAGS"中增加一条: 表:'CYCLES'; 字段:'MAINTENANCE'; 值:'X' (建议参考 @我来自星星 提供的方法对标准表进行修改:https://blog.csdn.net/kangliujie/article/details/78694940

    修改成功后,用SE16N验证,可看到多出一行如下的记录,此时分配分摊相关的不在需要产生请求。

     

    生产环境如何解决该问题

    一般来说,生产环境的SCC4 也会被设置为"不允许修改(No Changes allowed)",生产环境应将"客户端角色"设置为“生产",系统将不会要求这些常用事务码产生传输请求。

    请注意:不要将DEV环境的“客户端角色”改为生产,否则无法使用SCC1 再各集团间传输请求!

    (感谢 @龙立彬 提供此坑 ,详见 http://blog.sina.com.cn/s/blog_9e0607100100yp37.html)

     

    验证过的事务码

    我目前配置过的事务码有,这种方式对这些事务码有效

    1. 维护过账期间(OB52);
    2. 费用分配分摊相关;
    3. 维护WBS人员(OPS6/OPS7);

     

    补充信息

    VKOA 默认允许直接修改无需传输,如需强制必须传输,请参考:

    https://launchpad.support.sap.com/#/notes/2608100

     

    参考资料

    2269677 - OB52 TK430 Client XXX has status 'not modifiable' in test system 

    https://launchpad.support.sap.com/#/notes/2269677

    2469721 - Maintain cycles | Prompt for Customizing request | unwanted

    https://launchpad.support.sap.com/#/notes/2469721

    SE16和SE16N修改后台表数据方法

    https://blog.csdn.net/kangliujie/article/details/78694940

    展开全文
  • Excel中根据特定内容突出显示某个单元格,这个应该使用Excel的多数人都是知道的。 但是根据特定内容突出显示整行,使用的人就比较少了,因为这里需要使用到简单的函数功能。具体操作如下: 0、选中要设置的区域; ...

    Excel中根据特定内容突出显示某个单元格,这个应该使用Excel的多数人都是知道的。

    但是根据特定内容突出显示整行,使用的人就比较少了,因为这里需要使用到简单的函数功能。具体操作如下:

    0、选中要设置的区域;

    1、菜单【开始】->【条件格式】->【新建规则】:

     

    2、对话框【选择规则类型(S):】中选择:“使用公式确定要设置格式的单元格”;

    在公式框中输入:=$B2="NotStarted" (或 =IF($B2="NotStarted",1,0))

    (这里“NotStarted”是要匹配的特定内容)

    点击【格式】按钮,选择填充颜色(或者其它突出显示方式)。

     

    3、重复上述步骤,为其它要匹配的内容设置不同的格式,最后点击【确定】完成。

    完成上面的设置之后,整体效果是这样滴:

    展开全文
  • 历史多数攻击——共识攻击介绍

    万次阅读 2019-05-14 10:26:56
    历史多数攻击——共识攻击介绍 历史多数攻击(Past Majority Attacks)指的是历史上对某区块链拥有控制权(即共识节点中的大多数)的组织或个人,利用自己历史上存在的对该网络的控制权,从这个历史时间点开启新的...

    历史多数攻击——共识攻击介绍

    历史多数攻击(Past Majority Attacks)指的是历史上对某区块链拥有控制权(即共识节点中的大多数)的组织或个人,利用自己历史上存在的对该网络的控制权,从这个历史时间点开启新的分叉,但是这种分叉一般无法影响到原来主网络上的资产,只是fork出一条新的区块链。

    •在PoS模型下,当某个组织在某个历史区块拥有控制权时,其可以重构,从而危及他人的权益。然而让重构的区块被网络所接受,攻击者需进一步重构一条新的分支来取代当前分支。

    •PoW模型下,修改历史区块需重新计算有效哈希,并构建足够长的分支以取代当前分支,这需要非常庞大并且超过现有P0W网络整体算力的基础上才有可能。

    •BFT类模型下,亦需要多数共识节点均同意方可构造新的分支。因此在POW和BFT类模型下,此攻击退化为51%攻击。

    •BFT模型下,攻击者需要控制过去时间点上2/3 以上的节点,才可以控制整个共识网络,才可以发动历史多数攻击。

    共识攻击

    如果矿工(或矿池)想要利用自身拥有的哈希算力进行欺骗或攻击的话,比特币的共识机制(什么是共识机制)至少在理论上是有可能被攻击的。正如我们所看到的,共识机制依赖大多数矿工出于个人利益而愿意诚实行事的假设前提。但是,如果一个矿工或矿工集团能获得全网较大比例的挖矿能力时,他们就可以通过攻击共识机制从而瓦解比特币网络的安全性和可用性。

    值得注意的是,共识攻击只会影响将来的共识,或者最多也只能影响到“不久前”(过去的几十个区块)的时段。比特币的账本随着时间推移将越来越稳定。虽然在理论上允许任何深度的分叉存在,但在实践中,要迫使非常深的分叉产生需要极其巨大的算力,因此老的区块实际上是不可变的。共识攻击也不会威胁私钥和签名算法(ECDSA)的安全。共识攻击无法盗取比特币,无法不带签名地使用比特币,也不能转移比特币,不能改变过去的交易或所有权记录。共识攻击只能影响最近的区块,并且通过拒绝服务攻击来破坏将来的区块生成。

    一种针对共识机制的攻击叫作“51%攻击”。这是由一群控制了51%以上的全网哈希算力的矿工,合谋发起的对比特币的攻击。他们拥有开采大部分区块的能力,可以故意在区块链中制造“分叉”、进行双重支付交易,或者针对特定交易或地址发起拒绝服务攻击。分叉/双重支付攻击指的是攻击者通过在某个区块之下创建分叉,形成新的主链,使之前已确认的区块变得无效。只要拥有足够的算力,攻击者就可以将连续6个甚至更多区块变为无效,从而使那些经过6次确认、已被认定为是无法篡改的交易变为无效状态。另外,需要注意的是,双重支付只能应用于攻击者自己创建的交易,因为他们只能对这些交易进行有效签名。如果通过使交易失效,攻击者可以得到不可逆的交换品,或者可以购买产品而不用付钱,那么对自己创建的交易进行双重支付是有利可图的。

    51%攻击(大多数攻击)——共识攻击介绍

    先来看看大多数攻击(Most Attacks)在PoW共识模型中的表现。若某个组织掌握了整个网络的大多数算力(51%),那么该组织构造一个有效区块的平均时间会少于其他所有的矿工,从而在相同的时间内该组织可以构造出更多的区块,并以最长的分支被网络接受为最终确认区块。这样整个区块链处于该组织的控制之下。

    显而易见,网络规模越大,总算力越强,掌握大多数算力的难度亦越高。

    在PoS模型中,51%攻击转变为掌握网络中的大多数股权,其攻击的代价从算力(电力)变为资产。

    在BFT类共识模型中,控制了1/3的共识节点即可阻止共识,控制了2/3的共识节点即可操作共识结果。由于此类模型中共识节点通常是一个特定的范围,其安全性依赖于选择共识节点时的审査机制,以及对节点的安全保护。

    长程攻击——共识攻击介绍

    长程攻击(Long-Range Attacks)来源于用户不得不撤回保证金的权利。这意味着攻击者可以从任意长度的距离建立一个分叉而不用担心被削减。一旦保证金被解除绑定,激励不从某个高度区块前进行长距离投票就被取消了。换句话说,当超过2/3的验证者解除了绑定,那么他们就可以恶意地创造包含之前验证者集的第二条链,这可能导致任意的交易。

    解决方法如下。

    •忽视从那些当前没有保证金存款的节点发出的共识信息,能够解决或规避长程攻击问题。解除绑定保证金必须要经过一个“解冻”期。解除绑定之后,代币需要数周到数月的“解冻”时间,用以实现“同步性”前提(即延迟的消息)。

    •禁止在N个块之前恢复,其中N是保证金的长度。该规则可使任何长程分叉无效。

    此类攻击仅针对PoS共识。

    贿赂攻击——共识攻击介绍

    贿赂攻击(Bribery Attacks)指的是敌手方故意使用数字货币或者法币贿赂共识节点,使其工作在特定的区块或者分叉上,来产生对敌手方有利的分叉链。

    •PoW算法:由于每个节点都可以自由地加入,有资格参与共识生成区块,因此这种攻击在策略上是可行的。

    •PoS、DPoS算法:参与共识的节点需要占据一定的股份权益,因此实施这种攻击需要贿赂绝大多数权益节点。

    •DBFT共识算法:在容忍f个节点错误的情况下共有3f+l个共识节点,因此贿赂f+1个节点后能使共识暂停出块,贿赂2f+l以上节点时才能按照对敌手方有利的方式出块。

    无利害关系攻击——共识攻击介绍

    首先要引入一个概念,即剑手(Slasher)协议。如果你在同一个层级的分叉上同时签署了两份协议,那么你就会失去你所能得到的区块奖励。

    无利害关系(Nothing At Stake Attacks)问题指的是,权益证明机制中的矿工最佳的策略是在所有的叉上进行挖矿,因为签名的制造非常便宜。

    解决方法:将保证金加入剑手协议意味着无利害关系问题被正式解决。只有当验证节点缴纳存款保证金的时候,它签署的承诺才有意义。当一个保证金节点在相同高度处创建或签署两个区块时,则其存款保证金就会被削减,并且这种行为会被认为是“明显不良的行为”。苛刻以及允许这种惩罚的条件,对于所有的BFT协议都是有帮助的。此类攻击仅针对PoS共识。

    无法同步攻击——共识攻击介绍

    无法同步攻击(Desynchronization Attacks)就是让一个节点无法与网络中的其他节点保持统一步调。比如,让节点A收到区块的时间总是要比其他节点晚一些,这样即使A成功记账,也会远远落后于其他节点,从而不被网络接受,也就造成了节点A无法获得其算力预期的收益。

    这个通常是PoW、PoS、DPoS的问题;PBFT或者DBFT因为记账节点首先会选择高性能的服务器,并且通常并不会直接开放在开放性网络中,而是由同步节点作为连接对象,因此共识节点很难产生无法同步的问题。通常达成共识并即刻落账。

    交易拒绝攻击——共识攻击介绍

    在交易拒绝攻击(Transaction Denial Attacks)中,对手的目的是阻止某笔交易成功完成。例如,对手可能想要瞄准一个特定账户,并防止账户持有人发布交易。

    这个问题可以分2个阶段来分析。

    1)在进入P2P网络之前,任何共识算法都是一样的,如果发出交易的节点在这个时间点的网络上是被控制的,那么这笔交易是没办法流转到P2P网络的。

    2)在进入P2P网络之后,P2P网络会发散式地广播这笔交易到所有的共识节点。于是这个问题就退化成了51%攻击,即是否控制了共识的问题(参见51%攻击)。

    日蚀攻击——共识攻击介绍

    日蚀攻击(Eclipse Attacks)是一种针对比特币网络的攻击。每个比特币网络节点默认最多允许被117个其他节点连接(输入连接),同时最多可以向其他8个节点发起连接(输出连接)。

    日蚀攻击的目标就是比特币节点的接入连接。通过控制某一个比特币节点的接入连接来达到控制比特币输入的消息来源,使这个节点仅跟恶意节点通信。

    日蚀攻击中,攻击者只需40%的算力就可以达到51%攻击的效果。假设比特币网络分为2个算力为30%的节点和一个算力为40%的节点,如果攻击者拥有算力为40%的节点,他就能通过日蚀攻击来达到分割这两个30%算力的节点,使之不能正常出块。这样攻击者拥有的40%算力的节点就能控制整个网络。

    日蚀攻击的实施方法如下。

    1)攻击者可以通过某种方法把正常的比特币节点的输出连接都连接到攻击者控制的恶意节点,同时比特币节点的输入连接都被恶意节点连满。那如何做到让正常的比特币节点都连接到恶意的节点呢?在比特币节点中有两张表,一张叫作NewTable,用来保持当前节点所感知到的网络中其他节点的地址;另一张叫作TriedTable,用于保存曾经连接过的节点。比特币节点每次建立输出连接的,都是在这两张表中选择一个时间戳较新的节点连接。通过控制僵尸网络不断地去连接这个比特币节点,即可达到刷新这两张表的目的,使得这两张表保存了大量的恶意节点的地址信息。

    2)攻击者再通过DDoS攻击等方法,让这个比特币节点重启。这样这个比特币节点连到的就都是攻击者控制的恶意节点了。

    从本质上说,日蚀攻击是一种针对P2P网络的攻击。这种攻击方法与共识算法关系不大,理论上讲对PoW、PoS、DbFT等共识算法都有效,但是它非常依赖于节点在P2P网络处理上的漏洞,因此实施攻击不具备普适性。

    权利压迫攻击——共识攻击介绍

    权利压迫(Grinding Attacks)是指攻击者在获得记账权的时候,利用自己手中的权利实施一些计算或者一些操作让系统的随机数产生偏斜,来增加自己下一次获得记账权的可能性,可能的方式如下。

    方式一:一个验证者通过一些参数组合或者找到一个特殊的参数来增加自己被选择,产生一个有效块的可能性。

    方式二:利用对当前块的控制能力去影响下一个块。

    举一个不真实的例子,块N+1的随机性依赖于块N的签名,如果一个验证者在当前块中一直指定自己是下一个块的验证者,便永远控制住了整个系统。

    方式三:通过跳过块的方式,控制出块的随机性。

    由于N+1的随机性依赖于N的验证者,验证者得以通过跳过自己创建的块的方式来控制出块的随机性。当然这会丢失一个块的奖励,但是随之而来的,他可能拥有下面数十个块高于平均数的随机性控制能力。

    PoS提出了两种解决方案。

    (1)第一种方法

    权利压迫的方式一和方式二比较容易解决,一般的做法是要求验证者事先抵押自己的资产,并且也不使用那些容易被操纵的信息来产生随机数。对于方式三,可以采用以下的策略:首先考虑使用基于秘密共享或者确定性门限函数的方案,并且验证者协同生成随机值,那么除非大多数验证者勾结,否则这些方案对于所有操作都是强大的。

    (2)第二种方法

    使用验证者事先提交信息(即发布sha3(x))的密码方案,在块中发布x,随后将x添加到随机性池中。这里有两个理论攻击方式。

    1)在承诺时间处理x。这是不切实际的,因为随机性结果会考虑到许多参与者的价值,如果他们中的一个是诚实的,那么产出将是一个统一的分配结果。均匀分布与任意多个任意偏置分布异或,仍然给出均匀分布。

    2)有选择地避免发布块。这种攻击花费了一个块奖励机会的成本,并且因为该方案阻止任何人看到除了下一个以外的任何未来验证者,所以它几乎无法提供多于一个块的奖励。唯一的例外情况是,如果验证程序跳过,则下一个验证程序再运行,如果验证程序的内容是相同的,那么这会是一个严重的问题。对此可以通过明确的跳过惩罚,来加大惩罚更多的跳跃。

    3)Iddo Bentov的“多数信标”是一种解决方案,它通过获取由其他信标生成的前N个随机数的位的大部分来产生随机数(即,如果大部分源数字中的第一个比特为1,则结果的第一比特位为1,否则为0;如果源数字中的大部分第二个比特为1,则结果的第二个比特为1,否则为0等)。总而言之,存在许多己知的权利压迫解决方案。这个问题更像差分密码分析,而不是

    停滞的问题——一个让利益相关者、设计者最终理解

    并且现在知道如何克服的麻烦,而不是一个根本的、不可避免的缺陷。

    •PoW:记账权的争夺依赖于算力,因此不存在权利压迫。

    •PoS:存在权利压迫,需要加入其他机制来避免。

    •DPoS:DPoS其实更多的是一种理念,具体要看delegate的实现。如果不是确定的随机性,依然会存在权利压迫的可能性。如果是按照顺序执行的,则没有这个问题。

    •PBFT:确定性的记账人顺序,公平的随机性,因此不存在权利压迫。

    •DBFT:引入代议制的选举委托机制,在公平的基础上推选出可信的确定性的记账人列表,并按照顺序来验证出块,因此不存在权利压迫问题。

    Sybil攻击

    2018-11-17 15:18

    公有链中,在没有身份认证机构的情况下,用户创建新身份或新节点是不需要代价的,攻击者可以很容易地伪造身份加入网络,并试图去获取大量的ID。在掌握了若干节点或节点身份之后,他们可以随意做出一些恶意的行为,比如发出虚假节点加入请求消息,误导节点之间正确路由来降低区块链网络节点査找效率;发布虚假资源或是故意不响应请求来消耗节点之间的链接资源等。

    图5-2演示了在比特币网络中,大量的Sybil节点被注入到网络中。这些节点可以假冒比特币的全节点,故意不响应请求,使得其他节点必须为此等待,从而拖慢整个区块链网络的速度;而且像手机钱包(比特币钱包介绍)这种SPV节点,都需要通过全节点才能正常收发比特币,当SPV节点连接到这种假冒的全节点时,它们就无法正常工作了。

    比特币网络中Sybil攻击示意图

     

    双花攻击——共识攻击介绍

    双花攻击(Double Spending Attacks)是指同一个数字货币可以花费一次以上。

    区块链中,每一笔交易都是一个请求。区块链会验证这个交易的请求,并检査其所使用的资产的有效性、是否使用了己花费的资产来决定是否提交进入共识,并广播成功验证的账本。如果系统对双花攻击没有防范,将会是一件非常可怕的事情。

    这也是每一个区块链必须要解决的问题,在不同的共识体系下解决方案也会不同。

    (1)PoW共识算法(查看什么是pow

    在PoW体系下,系统同时允许存在多条分叉链(什么是区块链分叉),每一条链都可以声称自己是正确的。但是有一个最长有效原理,即不管在什么时候,最长的那条区块链被认为是拥有最多的工作量,称之为主链。当然,如果其他的分支链在接下来获得了更多的工作量,并超越了原先主链的长度,那么主链就会变成这条新链,而之前的主链则会被认为是无效的链,而且在这个分叉上所进行的交易会被认为是无效的,转而以新的主链为主。比特币目前大概需要12个区块的确认时间,才能基本确定某笔交易的不可篡改,因为要超越这一工作量将是非常困难的,并且攻击的代价会随着区块数的增加变得越来越困难。

    在这个过程中有一种可能,在比特币的众多分支中,假设在第一条链分支上花费了一笔钱,再假设黑客能操控算力,让第二条链能拥有更多的算力并超越了第一条链的长度,那么第一条链的交易便相当于回滚了,黑客就能重新再拥有第一条链上花费掉的比特币,这个过程就是比特币上的双花。

    因此,PoW共识算法要求等待一定的区块确认数,当工作量达到几乎无法超越、回滚的状态时,才可以确认为资产的成功转移。

    (2)PoS、DPoS、DBFT共识算法

    此类算法是确定性的,交易一旦确认就不可逆转,因此没有双花攻击。

    双花攻击的特例是重放攻击,即攻击者“重放”他在网络上“窃听”或在区块链中“看到”的消息。由于这样会导致整个验证实体重做计算密集型的动作和/或影响对应的合约状态,同时它在攻击侧又只需要很少的资源,因此重放攻击也是所有区块链必须要解决的一个问题。如果是一笔支付交易,那么问题就更大了,重放可能会导致在不需要付款人的参与下,多于一次的支付。

    对于UTXO模型,要防止重放攻击,共识节点只需要对收到的交易检査其Hash是否在账本中存在,或者检査交易的input是否已经被花费即可。

    对于Balance模型,在交易中放置一个nonce值,要防止重放攻击,共识节点只需要对收到的交易检査其Hash是否在账本中存在即可。

    其他区块链专业名词:

    多重签名——典型的数字签名技术

    HMAC——典型的数字签名技术

    时间戳服务器

    拜占庭将军问题是什么

     

     

    展开全文
  • 可能很多都听说过网络通信的 5 层模型,但是可能并不是很清楚为什么需要五层模型,五层模型负责的任务也有可能经常混淆。下面是网络通信的五层模型 说实话,五层模型的具体内容还是极其复杂的,不过今天这篇文章...
  • 要建立一个完整的语言程序,我们就需要语法解析器在遇到特定的输入的时候能够产生对应的动作。“语法->动作”的映射对集合就是连接我们的语言程序(或者,至少是语言接口)的语法到大型实际相关应用之间的桥梁。
  • 平衡学习是机器学习问题的一个重要子域,其主要关注于如何从类别分布均衡的数据中学习数据的模式。在这篇文章中我们主要关注平衡分类问题,特别地,我们主要关注类别极端平衡...
  • 8000字干货:那些很厉害的是怎么构建知识体系的

    万次阅读 多人点赞 2019-09-29 11:18:27
    能够应用甜蜜区模型找到特定领域来构建知识体系。 1. 知识体系?有必要吗? 小张准备通过跑步锻炼身体,可因为之前听说过小腿变粗、膝盖受伤、猝死等等与跑步有关的意外状况,有点担心自己会掉进各种坑里,就在...
  • 第二章 WLAN 和固有的安全性 作者:Vivek Ramachandran, Cameron Buchanan 译者:飞龙 协议:CC BY-NC-SA 4.0 简介 建筑越高,地基就要打得越深。...WLAN 在设计上拥有特定安全性,它们可被轻易利
  • 有学历的程序员永远懂没学历的痛,就像白天懂夜的黑。有学历的还没等毕业,校园招聘已经开始了,还没有走出校园,可能已经和某个知名的大公司签下了协议,拿到实习试用的机会;而没有学历的呢,校招对他们来说...
  • 程序员破此关,难达优秀

    万次阅读 多人点赞 2019-01-14 08:01:40
    从这张图可以看到,开发者一般很少有专门时间来学习知识和技能,多数时候是进项目,在做项目的过程中,会使用已有知识,会接触到各种新知识,懂不会,就通过看书、听课、问、搜索等方式来学习,然后直接组合使用...
  • 样本均衡是指在一组数据集中,标签的一类天生占有很大的比例,但我们有着捕捉出某种特定的分类的需求的状况。比如,我们现在要对潜在犯罪者和普通进行分类,潜在犯罪者占总人口的比例是相当低的,也许只有2%左右...
  • 大龄程序员的未来在何方

    万次阅读 多人点赞 2015-12-16 07:36:25
    当程序员老去……有说这是程序员最怕的事,然而,老程序员的将来究竟怎样……
  • 人工智能为Python火热增长动力借着人工智能的东风,Python在这两年逐渐火了起来,Python在编程语言排行中的不断攀升,不得说有着人工智能的很大功劳。凭借Pyt...
  • 罗胖说看到商店里4.99的标签,他心里就想这就是商家的定价策略吗?自动将价格取整,鄙视商家还充满内心的智力优越感。吐槽:我总是觉得商家引进西方这种文明又安静的营销策略是一种进步。对比一下我们的老方法吧。...
  • 工作两年小结----勿忘初心负梦想

    千次阅读 多人点赞 2016-08-01 00:21:59
    前言:转眼又是一年,2016年7月3号是自己正式参加工作两年,入职一家新公司...我是先看完书,再看了2集电视剧,然后真的看下去了,因为张一山刻画的余罪跟自己心中的那个余罪落差太大。我甚至觉得夏雨来主演会更好一
  • 平衡数据的机器学习

    万次阅读 2017-09-26 09:13:40
    平衡数据的场景出现在互联网应用的...顾名思义即我们的数据集样本类别极均衡,以二分类问题为例,假设我们的数据集是$S$,数据集中的多数类为$S_maj$,少数类为$S_min$,通常情况下把多数类样本的比例为$100:
  • 这个技术引入任何交易结构上的假设(例如假设少数直接频繁交易之类)。可以完美支持任意场景的大规模支付系统的需求。 这个工作,除了我和汪浩之外,还有张小兵(前pplive技术合伙)一起参与研究和实现。借这个...
  • 人类常见的十大思维谬误

    千次阅读 2015-08-27 14:15:48
    你可以有意识的专注想一件特定的事情,但是你的潜意识却在处理着成千上万的想法。不幸的是,我们的知觉并完美,时常做出一些错误的判断,心理学中把这种现象称为认知偏差(cognitivebiases)。认知偏差在每个的...
  • 趁这两天周末时间,我(liigo)按照自己的一个简单到幼稚的思路,做了一些成熟也尚未形成结论的研究。这个思路是:先用MyCCL定位特征码,然后看这个(这些)特征码位于EXE/PE文件的什么位置,如果是位于代码段(....
  • 可毕业后回首,却很少有能说,自己从来没有迷茫过。迷茫,仿佛就是一团乌云,笼罩在每一个心中怀有抱负的的头上。每当夜深人静,思绪归于对自己人生未来的严肃思考,不知去往何处的苦闷,再加之不断迫近的升学/...
  • 平衡学习(Imbalanced learning)

    万次阅读 多人点赞 2018-07-23 18:15:24
    数据平衡 在很多真实场景下,数据集往往是平衡的。也就是说,在数据集中,有一类含有的数据要远远多于其他类的数据(类别分布平衡)。在这里,我们主要介绍二...众所周知,健康的的数量肯定远远大于癌症...
  • 在开发分类机器学习模型时遇到的挑战之一是类别平衡。大多数用于分类的机器学习算法都是在假设平衡类的情况下开发的,然而,在现实生活中,拥有适当平衡的数据并常见。因此,人们提出了各种方案来解决这个问题,...
  • 惊奇的是,我们在第9天一早生成的cookie能够让我们获取checkbox验证码,需要表2中列举出来的任何浏览活动和网络连接类型。我们的测试还发现,每一个cookie能在一天中收到最多8个checkbox验证码。 表 2. ...
  • 电脑识别某个U盘

    千次阅读 热门讨论 2016-12-04 09:47:43
    昨天发生了奇怪的事情,自己的电脑唯独识别自己的U盘,更加奇怪的是自己的U盘在别人的电脑上可以识别。那么问题来了,到底是哪里出了问题。伟光帮忙解决之后自己又查了查原因。  下面是电脑无法识别U盘的其中几...
  • 超硬核!数据结构学霸笔记,考试面试吹牛就靠它

    万次阅读 多人点赞 2021-03-26 11:11:21
    因此,只要有能将现有指数阶算法中的任何一个算法化 简为多项式阶算法,那就取得了一个伟大的成就。 体会一下: 空间复杂度也是一样,用来描述占空间的多少。 注意时间空间都能炸。 所以才发明了那么多算法。 符...
  • 写给人类的机器学习 五、强化学习

    万次阅读 2017-10-22 22:59:27
    在机器老鼠的例子中,多数奖励都是 0,但是如果你到达了一个位置,那里有水或者奶酪,就是正的,如果有电击就是负的。 0 和 1 之间的折现系数 γ 。它量化了立即奖励和未来奖励的重要性的差异。例如,如果 γ 是 ...
  • 使用异常还是错误码?

    千次阅读 2019-06-22 18:06:46
    这曾经是个社区争论不休的话题,多数人是选择异常替代错误码的。反对者中,有人认为应该使用异常去控制程序流程,也有些人认为只有"数据库连上"这种系统异常才算异常,还有些人认为异常会有额外的性能开销… ...
  • Java面试通过?这篇文章你看了吗?

    万次阅读 多人点赞 2020-08-06 11:12:48
    注:本人才疏学浅,知识还在积累中,能保证每个回答都满足各种等级的高手们,(由于一些技术的升级,部分答案能保证实时同步准确,还请大家在阅读的时候多多留意)若发现有问题的话,请评论指出。
  • Java设计模式_描述

    万次阅读 2017-09-05 15:50:30
    概述:设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。使用设计模式的目的:为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。 设计模式使代码编写真正...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,863
精华内容 46,345
关键字:

不特定多数人