引入不是搬文件,是把依赖闭合
一句话总结
在封闭网络的入境失败中,失败的大部分不是因为签名,而是因为依赖性,这是包含阻止它的装置的全部的捆绑包和文件单元清单。
为什么需要这个?
在外部的部署是这样的。从存储库接收代码,软件包管理器接收依赖性,容器注册表填充映像层。我们移动的实际上是“地址”,实际内容在运行时由网络填充。
在封闭网络中没有那个网络。如果移动地址的话,什么都不会填充。所以移动的不是地址,而是全部内容。不仅是应用代码,还有那个代码调用的库,那个库调用的库全部。
这里出现的失败非常具有特点。通过入库审查,拿着媒体进去,开始安装后才发现一个图书馆丢失了。而且为了填补那个,必须再次出去,再次装进去,再次接受审查。在审查周期以周为单位的地方,这就是一周。丢失一个文件的成本是一周这一事实是整个模块的理由。
怎么行动
所以携带套装中会同时包含三个。
**第一,payload。**这是执行所需的所有文件。这里的原则是“即使在外面填充一次网络,也包含在内”。因为是在开发环境中,所以判断“只要可以就行”是最危险的——开发环境中已经有缓存了。
**二、宣言书。**是载入在payload中的每个文件的SHA-256列表。为什么用整个bundles的hash不足——整个hash只告诉“有什么不同”。如果不知道哪个文件不同,调查的地方就变成了整个bundles,在数百个bundles中,这实际上是无法调查的。路径写成相对路径。接收方会在其他目录解压,所以绝对路径在原地毫无用处。
**三、签名。**这是关于一份宣言书的签名。即使有数千份文件,只要有一个签名就可以了。文件的完整性由宣言书负责,宣言书的真实性由签名负责。这两种层面的区别就是下面的故事。
페이로드 파일들 ──(각 파일의 SHA-256)──▶ MANIFEST.sha256 ──(개인키 서명)──▶ MANIFEST.sig
▲ ▲ ▲
└ 파일 해시 대조로 확인 └ 목록이 맞는지 └ 목록을 우리가
아는 사람이 만들었는지
在现场相遇的样子
**有很多地方没有gpg。**如果不在授权软件列表中,就无法安装,要添加到列表中,首先要进行入境审查。所以从现实上讲,到处都有。openssl做。openssl dgst -sha256 -sign科-verify两个命令就可以完成签名和验证。虽然不华丽,但这是在这样的环境中实际实现的方法。
**二进制无法用眼睛确认。**文本文件是diff虽然可以这样看.so我.whl打开也什么都看不到。而且因为混入了NULhead我grep如果物理的话,就无法相信结果本身。处理二进制的数据的工具是file,sha256sum,openssl认为只有三个比较安全。
**一次被攻击一次。**有次重新捆绑后,hash文件没有再次出现。被放入媒体中,接收方没有匹配hash而被拒绝。再出现需要一天时间。之后,一定要把捆绑命令和显示hash命令粘贴到同一脚本中。
接下来要读的东西
到此为止是“要发送什么”。紧随其后的文章是“接收方按什么顺序确认什么”。哈希和签名分别保护什么,只看一层的话哪些变更会通过,以及如果公钥包含在打包中,为什么验证整个内容变得毫无意义,这就是文章的内容。接下来在练习中一次用手踩两篇文章。