《互联网的世界》第六讲-去中心化和安全
互联网构建于开放互联的中立原则之上,公平接入,数据互联互通,流量被无差别对待,这意味着互联网本质上是匿名,去中心的,这与我们的现实世界完全不同。
但互联网上的主流业务却是 c/s 产销模式,试图在互联网世界复刻现实世界。我们对比开放互联的中立原则和现实世界的本质差异,便能发现互联网安全相关问题的原因和解法。
人们在现实世界的行为分两类,私人行为和公共行为,私人行为需要明确的身份认证,而公共行为则需要为该行为支付成本,无论私密行为还是公共行为,都是曝光的,区别在于仅曝光身份还是曝光在光天化日之下。
朋友聚餐,大家都相互熟识,购买商品,需要为商品付费,进入场馆,需要核验证件或票据,在街上殴打他人,会暴露在众目睽睽之下。在互联网的上层,绝大多数应用模仿了现实世界,比如限制未登录用户的操作,要求对服务付费等,简单将线下服务搬到了线上,就好像用计算器代替算盘。
但在互联网本身,ping 某个域名,telnet 某个 ip:port,可以随时随地零成本发生,这是互联网 ddos 发生的本质原因。
简单设想一个类似互联网的现实世界,每个人都蒙面潜行,被允许进入任何地方,世界会成为什么样子。只要行为不曝光,坏事自然而然就会发生。
看看 ip 报头里有什么,sip,dip 可以随意改变,snat,dnat 还竟然利用此灵活性成立 tcp/ip 基础操作,基于 dip 逐跳转发将状态从传输行为中剥离,这些开放互联的中立原则所要求的结果重在让扩展变得容易,但也是大多数网络安全问题的温床。
安全问题显而易见的方案是模仿现实世界。稍微扩展一下 ip 报头的 checksum 字段,让它不仅对自然误码 robust,也对恶意修改 robust。
当终端接入,注册 ip 被激活,运营商以该 ip 为内容签一个签名返还给终端,终端发送数据时将该签名作为 checksum 置入 ip 报头。只有运营商设备允许对报文做 snat,而运营商拥有私钥可以在修改 sip 后重新签名,而不仅仅是单机计算 checksum。
内容提供商入口设备配置运营商证书链以做辅助验证,只要运营商本身不作恶,此举将消除包括 ddos 在内的大多数恶意访问。
正常时段,任何转发设备无需对运营商签名做任何操作,当流量发生异常,设备启用验证,丢弃并审计所有验签不通过的报文。此举并非将攻击目标转移到转发设备,有人说验签是个耗时操作,这是一种自找的 ddos。但事实上在实际攻击奏效前,抑制甚至溯源工作就已完成,此举将大大减轻流量清洗的压力。
sip 所在的运营商接入网出口设备的验签是可选的,此举进一步加大了 ip 报文伪造的难度,除非从骨干网直接注入伪造报文。运营商有责任对自己客户的行为负责,攻击者首先要过自家的关,这是背后的原理。2022 年,出城要验一次,进入对方地界还要再验一次,出城核验不通过不让出而已,入城核验不通过再抓人。
这意味着,每个 ip 报文都携带了自己的家门信息,曝光于天下,如果恶意攻击者伪造了签名,在攻击端倪出现时,这些报文将成为第一批审计对象。当然,在无事发生时,没人在乎这个签名。
在现实世界,这是常规操作。在机场,车站和码头等枢纽地,随机的抽查身份证会对恶意行为造成威慑,当有事件发生时,几乎在场的每个人都会被查身份证,如果无事发生,人们会忽略查身份证这件事。
堵门,医闹,发诽谤传单,属于现实世界的 ddos,之所以很容易成功,原因就在于身份不曝光,行为零成本,都是一些无所事事的人,还能赚些钱。而丰巢快递柜超时收费策略则是针对另一种 ddos 的反制措施,为了防止驿站恶意将空纸箱长期占据快递柜而无法存在正常物品,丰巢实施超时收费,让攻击者付出成本,攻击也就缓解了。
在这意思上扩展,可把那些使用激进发包算法的 tcp 魔改也列入恶意行为,所有此类算法导致的网络拥塞都可列为 ddos 范畴,而它们在曝光机制下非常容易被审计,比如把操作系统和传输算法和 ip 一起置入 “身份证” 被运营商签名。光天化日之下,信息公开,恶事很难得逞。
然而进一步思考互联网安全的本质,为什么会有这些攻击,无论是 ddos 还是恶意篡改数据,难道不是因为它们能得逞才有这些攻击的么?回到 ip 协议的最初,它本就构建于开放互联的中立原则上,而此原则和我们的现实世界大相径庭,我们非要在 ip 上模拟一个现实世界,难道这不才是很多恶意攻击的根源吗?而我上面提到的 身份曝光 方案,本质上也是在支撑这种开放互联的世界对现实世界的模拟,显然事情搞复杂了。
互联网的世界本就去中心化,它有它自己不同于现实世界的玩法。维基百科,以 linux kernel 为代表的开源社区,区块链技术均透露了去中心玩法的本质。
数据分布式备份在各处,没有任何一个单独主体拥有超过 50% 的控制力,信息全部公开透明,这意味着所有针对单点的攻击都不会起到效果,而又没人可以实施压倒性的控制力,这让任何有效攻击都难以实施。
如何攻击 linux kernel,代码分布在所有社区成员自己的电脑上,通过 git 合作开发,提交几行恶意代码,需要通过所有妹忒呢儿的 review,所有代码的修改都在众目睽睽之下。同样的道理,攻击区块链也很难得逞。去中心化应用本身自带抗攻击属性。
大胆点说,互联网一开始就没考虑安全并不是缺陷,而是构建互联网应用的方式不对。我们现在的互联网应用无异于将一个珠宝店搬到了一个遍地黑衣潜行无身份村民的村落。
一种有趣的社工学拥塞控制的方法,将每个站点的月流量,峰值流量,平峰流量,均差,占比,用户数等信息公示出来并排名,如果出现一个巨无霸流量大户被曝光,它自行优化整改的概率会很大。因为在许诺公平的公开环境,风头过于突出往往会带来内心的焦虑甚至恐惧。去中心化的根基就是曝光,公开。
现实世界的典型去中心化案例,比如宗教社会,恐怖组织。
…
再次强调,目前构建的大多数互联网应用,几乎在模拟现实世界,这注定它们易于被攻击。即便摘掉曝光性,成本的差别,互联网攻击也比现实世界的攻击要容易很多。因为准光速运作的互联网是一个四两拨千斤的放大器。
这很容易理解。
假设分别来自全国 290 个地级市的 290 个人同时步行出发去往位于深圳的一位经理的家门口堵门,每人在经理家门口堵 1 天,你觉得经理家门口最多会堵多少人,假设是 a,如果步行换成开车,同样的数字是 b,可以想象,a < b,如果每人坐飞机前去,这个数字几乎就是 290。毫无疑问,速度会削弱距离差异。
在互联网世界,排队时间,事务处理时间均在 100ms~1000ms 级别,这个时间大于绝大多数传播时延,有理由认为在世界任何地方同时触发的报文几乎在同一时间到达任何目标,这就是潜在的 ddos 温床。
互联网的各类操作时延之间的占比并没有恰好平滑掉突发,它们并不是同质的。信号以准光速传播,而排队和处理时延则取决于带宽和 cpu 以及事务逻辑的复杂程度。反过来看现实世界,各类操作时延即使不是同质,差异也不大。
某个操作时延变快,而其它操作没有等比例变快,突发造成的拥塞就会严重一些,严重到一定程度,就可算为攻击,我们发现,汽车提高了出行速度,但办事速度没有提升,所以服务大厅排队就会更严重,而互联网定制的导航,旅游,购物等行为,会造成更大程度的拥堵,背后也是这个原理。这是中心化 c/s 模式的内在属性。
下图是一个同样的波动在不同基数下的实际效果,基数足够大,波动效果就足够小:
皮鞋店一个店员,经理们从步行来买皮鞋,距离差异会给店员足够的时间错开突发,当经理们开车来买皮鞋时,排队就不可避免了,服务质量就会下降。如果是分布式去中心化皮鞋店,经理们自然无需集中到同一个皮鞋店,经理速度的提升可用增加分布站点来平滑。
如果有更多的人为 linux kernel 提派池,可以自动涌现出更多的妹忒呢儿,奉献时间是一个天然的妹忒呢儿度量指标,妹忒呢儿数量永远正比例于贡献者数量,这一切是自然而然发生的。去中心化模式天然避免了时延差异对突发的放大效应。
浙江温州皮鞋湿,下雨进水不会胖。
相关文章:

《互联网的世界》第六讲-去中心化和安全
互联网构建于开放互联的中立原则之上,公平接入,数据互联互通,流量被无差别对待,这意味着互联网本质上是匿名,去中心的,这与我们的现实世界完全不同。 但互联网上的主流业务却是 c/s 产销模式,试…...

nginx代理参数proxy_pass
proxy_pass参数用于配置反向代理,指定客户端请求被转发到后端服务器,后端地址可以是域名、ip端口URI 代理后端报错提示本地找不到CSS文件、JavaScript文件或图片 例如: nginx :10.1.74.109 后端服务:http://10.1.74.…...
_note_01
1.什么是跨平台 跨平台是指一个应用程序或一个编程语言,可以在不同的操作系统或平台上运行,而不需要对代码进行修改或重新编译。 跨平台应用程序或编程语言的设计和实现可以使开发者减少对特定平台的依赖,从而降低维护和开发的成本。同时&am…...

聊聊python中面向对象编程思想
面向对象编程思想 1、什么是面向过程 传统的面向过程的编程思想总结起来就八个字——自顶向下,逐步细化! → 将要实现的功能描述为一个从开始到结束按部就班的连续的“步骤” → 依次逐步完成这些步骤,如果某一个步骤的难度较大ÿ…...

MySQL-视图:视图概述、使用视图注意点、视图是否影响基本表
视图 一、视图概述二、使用视图注意点三、视图操作是否影响基本表 一、视图概述 在数据库管理系统中,视图(View)是一种虚拟表,它并不实际存储数据,而是基于一个或多个实际表的查询结果。视图提供了一种对数据库中数据…...

鸿蒙开发(四)-低代码开发
鸿蒙开发(四)-低代码开发 本文主要介绍下鸿蒙下的低代码开发。 鸿蒙低代码是指在鸿蒙操作系统进行应用开发时,采用简化开发流程和减少编码量的方式来提高开发效率。 1:开启低代码开发 首先我们打开DevEco Studio .然后创建工程。 如图所示ÿ…...

BUU [网鼎杯 2020 半决赛]AliceWebsite
BUU [网鼎杯 2020 半决赛]AliceWebsite 开题: hint附件是源码。在index.php中有一个毫无过滤的本地文件包含 <?php $action (isset($_GET[action]) ? $_GET[action] : home.php); if (file_exists($action)) {include $action; } else {echo "File not…...

超越 Siri 和 Alexa:探索LLM(大型语言模型)的世界
揭秘LLM:语言模型新革命,智能交互的未来趋势 近年来,虚拟助手的世界发生了重大转变。 虽然 Siri 和 Alexa 本身就是革命性的,但一种称为大型语言模型 (LLM) 的新型人工智能正在将虚拟助手的概念提升到一个全新的水平。 在这篇博文…...
Linux删除Mysql
//rpm包安装方式卸载 查包名:rpm -qa|grep -i mysql 删除命令:rpm -e –nodeps 包名//yum安装方式下载 1.查看已安装的mysql 命令:rpm -qa | grep -i mysql 2.卸载mysql 命令:yum remove mysql-community-server-5.6.36-2.el7.x86…...
CNN中常见的池化操作有哪些,作用是什么?
CNN中常见的池化操作有哪些,作用是什么? CNN中常见的池化操作只要是两种,平均值池化和最大值池化最大值池化常用于分类任务,是指在输入数据的局部区域内取最大值作为输出。最大池化的作用是降低特征图的尺寸,减少参数…...

能打印单据的软件,如进出库单据,物流快运单据,定制单据样式
能打印单据的软件,如进出库单据,物流快运单据,定制单据样式 一、前言 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 1、不同行业打印的单据不同 2、同一个行业打印的样式可能不同 3、有的行业已经印刷好了许多打印…...

uniapp列表进入动画
app列表入场动画 - DCloud 插件市场 列表入场动画https://ext.dcloud.net.cn/plugin?id16957...
FPGA TestBench编写学习
1 timescale 1.1 简介 timescale指令用于指定编译器在处理仿真时的时间单位和时间精度。这个指令通常在模块的顶层声明中使用,它告诉编译器和仿真器如何解释代码中的时间值。 timescale指令的语法如下: timescale <time_unit> <time_precis…...
Centos7 安装mongoDB
下载安装包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.2.12.tgz 解压 tar -zxvf mongodb-linux-x86_64-3.2.12.tgz移动到指定位置 mv mongodb-linux-x86_64-3.2.12/ /usr/local/mongodb在/usr/local/mongodb下创建文件夹 cd /usr/local/mongodb m…...

Redis冲冲冲——Redis持久化方式及其区别
目录 引出Redis持久化方式Redis入门1.Redis是什么?2.Redis里面存Java对象 Redis进阶1.雪崩/ 击穿 / 穿透2.Redis高可用-主从哨兵3.持久化RDB和AOF4.Redis未授权访问漏洞5.Redis里面安装BloomFilte Redis的应用1.验证码2.Redis高并发抢购3.缓存预热用户注册验证码4.R…...

谷粒商城【成神路】-【10】——缓存
目录 🧂1.引入缓存的优势 🥓2.哪些数据适合放入缓存 🌭3.使用redis作为缓存组件 🍿4.redis存在的问题 🧈5.添加本地锁 🥞6.添加分布式锁 🥚7.整合redisson作为分布式锁 🚗…...

Facebook、亚马逊账号如何养号?
之前我们讨论过很多关于代理器的问题。它们的工作原理是什么?在不同的软件中要使用那些代理服务器?这些代理服务器之间的区别是什么?什么是反检测浏览器等等。 除了这些问题,相信很多人也会关心在使用不同平台的时代理器的选择问题。比如,为什么最好…...

Milvus的相似度指标
官网:https://milvus.io/docs/metric.md版本: v2.3.x 在 Milvus 中,相似度度量用于衡量向量之间的相似度。选择良好的距离度量有助于显着提高分类和聚类性能。下表展示了这些广泛使用的相似性指标如何与各种输入数据形式和 Milvus 索引相匹配。 一、浮…...
如何在unity中实现倒计时
public class showtime : MonoBehaviour {public TextMeshProUGUI Countdown;void Update(){if (Input.GetKeyDown(KeyCode.Space))//如果按下空格后开始倒计时{StartCoroutine(hahaha());}}IEnumerator hahaha()//声明了一个协程函数 hahaha{int time 10;Countdown.text tim…...

蓝桥杯简单题,公司名称
题目链接(需要登录) #include <iostream> #include <cstring> #include <algorithm> using namespace std; bool lanqiao(string str,int len){ sort(str.begin(),str.end());//对str按照ascii排序if(str.find("Laainoq")s…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...

3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...