Rust API可靠性分析与验证Rust China Conf 2021 – 2022, Online, China 姜剑峰 Rust API可靠性分析与验证 Rust China Conf 2021 – 2022, Online, China 主题内容 • Rust第三方库API可靠性现状 • 现用方法的局限性 • 基于程序合成+模糊测试的可靠性分析方法 Rust China Conf 2021 – 2022, Online, China 自我简介 • 本(2019)硕(2022)毕业于复旦大学 • 目前在蚂蚁集团安全计算部门开发应用于机密计算的Rust系统软件 • 研究生期间主要从事Rust测试与验证工具的研究,本人所在的是国内最早 开展Rust程序分析相关研究的实验室(https://artisan-lab.github.io) • 我们关于Rust库模糊测试的论文 RULF: Rust Library libfuzzer):分支覆盖率;用例程序的构造 符号执行(klee, angr):路径爆炸;求解困难 静态分析(MirChecker, Rudra, SafeDrop):分析特定问题;假阳性 形式化验证(RustBelt):无法方便的验证第三方库 其他工具(Miri等)…..... Rust China Conf 2021 – 2022, Online, China API 测试用例合成 出错的API1 能够执行到出错API的程0 码力 | 13 页 | 1.68 MB | 1 年前3
Rust 程序设计语言简体中文版通过广泛的测试 和经验丰富的开发者的仔细审核代码来捕捉。在 Rust 中,编译器充当了守门员的角色,拒绝 编译包含这些难以察觉的错误的代码,包括并发错误。通过与编译器合作,团队可以将时间集 中在程序逻辑上,而不是追踪 bug。 Rust 也为系统编程世界带来了现代化的开发工具: • Cargo 是内置的依赖管理器和构建工具,它能轻松增加、编译和管理依赖,并使依赖在 Rust 生态系统中保持一致。 章深入介绍泛型(generic)、Trait 和生命周期(lifetime),这些功能让你能够定义适用 于多种类型的代码。第 11 章全面讲述了测试,,因为就算 Rust 有安全保证,也需要测试确保 程序逻辑正确。第 12 章中将会构建我们自己的 grep 命令行工具的功能子集实现,用于在文 件中搜索文本。为此会用到之前章节讨论的很多概念。 第 13 章探索闭包(closure)和迭代器(iterator),这两个 guess 来使其可变,而不是 &guess 。(第四章会更全面的解释引用。) 使用 Result 类型来处理潜在的错误 我们还没有完全分析完这行代码。虽然我们已经讲到了第三行代码,但要注意:它仍是逻辑行 (虽然换行了但仍是语句)的一部分。后一部分是这个方法(method): # use std::io; # # fn main() { # println!("Guess the number0 码力 | 600 页 | 12.99 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0通过广泛的测 试和经验丰富的开发者的仔细审核代码来捕捉。在 Rust 中,编译器充当了守门员的角色,拒 绝编译包含这些难以察觉的错误的代码,包括并发错误。通过与编译器合作,团队可以将时间 集中在程序逻辑上,而不是追踪 bug。 Rust 也为系统编程世界带来了现代化的开发工具: • Cargo 是内置的依赖管理器和构建工具,它能轻松增加、编译和管理依赖,并使依赖在 Rust 生态系统中保持一致。 第十章深入介绍泛型(generic)、Trait 和生命周期(lifetime),这些功能让你能够定义适用 于多种类型的代码。第十一章全面讲述了测试,因为就算 Rust 有安全保证,也需要测试确保 程序逻辑正确。第十二章中将会构建我们自己的 grep 命令行工具的功能子集实现,用于在文 件中搜索文本。为此会用到之前章节讨论的很多概念。 第十三章探索闭包(closure)和迭代器(iterator),这两个 guess 来使其可变,而不是 &guess。(第四章会更全面地讲解引用。) 使用 Result 类型来处理潜在的错误 我们还没有完全分析完这行代码。虽然我们已经讲到了第三行代码,但要注意:它仍是逻辑行 (虽然换行了但仍是语句)的一部分。后一部分是这个方法(method): .expect("Failed to read line"); 我们也可以将代码这样写: io::stdin()0 码力 | 562 页 | 3.23 MB | 1 月前3
Hello 算法 1.1.0 Rust版一位少女翩翩起舞,与数据交织在一起,裙摆上飘扬着算法的旋律。 她邀请你共舞,请紧跟她的步伐,踏入充满逻辑与美感的算法世界。 第 1 章 初识算法 hello‑algo.com 11 1.1 算法无处不在 当我们听到“算法”这个词时,很自然地会想到数学。然而实际上,许多算法并不涉及复杂数学,而是更多 地依赖基本逻辑,这些逻辑在我们的日常生活中处处可见。 在正式探讨算法之前,有一个有趣的事实值得分享:你已经 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。 ‧ 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。 1.2.3 数据结构与算法的关系 如图 表、树、堆、图,它们可以从“逻辑结构”和“物理结构” 两个维度进行分类。 3.1.1 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线 性关系;而在树中,数据从顶部向下按层次排列,表现出“祖先”与“后代”之间的派生关系;图则由节点 和边构成,反映了复杂的网络关系。 如图 3‑1 所示,逻辑结构可分为“线性”和“非线性0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版一位少女翩翩起舞,与数据交织在一起,裙摆上飘扬着算法的旋律。 她邀请你共舞,请紧跟她的步伐,踏入充满逻辑与美感的算法世界。 第 1 章 初识算法 www.hello‑algo.com 11 1.1 算法无处不在 当我们听到“算法”这个词时,很自然地会想到数学。然而实际上,许多算法并不涉及复杂数学,而是更多 地依赖基本逻辑,这些逻辑在我们的日常生活中处处可见。 在正式探讨算法之前,有一个有趣的事实值得分享:你 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。 ‧ 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。 1.2.3 数据结构与算法的关系 如图 表、树、堆、图,它们可以从“逻辑结构”和“物理结构” 两个维度进行分类。 3.1.1 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线 性关系;而在树中,数据从顶部向下按层次排列,表现出“祖先”与“后代”之间的派生关系;图则由节点 和边构成,反映了复杂的网络关系。 如图 3‑1 所示,逻辑结构可分为“线性”和“非线性0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.0.0 Rust版一位少女翩翩起舞,与数据交织在一起,裙摆上飘扬着算法的旋律。 她邀请你共舞,请紧跟她的步伐,踏入充满逻辑与美感的算法世界。 第 1 章 初识算法 hello‑algo.com 11 1.1 算法无处不在 当我们听到“算法”这个词时,很自然地会想到数学。然而实际上,许多算法并不涉及复杂数学,而是更多 地依赖基本逻辑,这些逻辑在我们的日常生活中处处可见。 在正式探讨算法之前,有一个有趣的事实值得分享:你已经 数据操作尽可能快速,涵盖数据访问、添加、删除、更新等。 ‧ 提供简洁的数据表示和逻辑信息,以便算法高效运行。 数据结构设计是一个充满权衡的过程。如果想在某方面取得提升,往往需要在另一方面作出妥协。下面举两 个例子。 ‧ 链表相较于数组,在数据添加和删除操作上更加便捷,但牺牲了数据访问速度。 ‧ 图相较于链表,提供了更丰富的逻辑信息,但需要占用更大的内存空间。 1.2.3 数据结构与算法的关系 如图 表、树、堆、图,它们可以从“逻辑结构”和“物理结构” 两个维度进行分类。 3.1.1 逻辑结构:线性与非线性 逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照一定顺序排列,体现了数据之间的线 性关系;而在树中,数据从顶部向下按层次排列,表现出“祖先”与“后代”之间的派生关系;图则由节点 和边构成,反映了复杂的网络关系。 如图 3‑1 所示,逻辑结构可分为“线性”和“非线性0 码力 | 383 页 | 17.61 MB | 1 年前3
简谈 Rust 与国密 TLS - 王江桐TLCP、区块链等场景,用于签名 验签等 Sm3 GM/T 0004-2012 ISO/IEC 10118-3:2018 计算密码杂凑 哈希 256 SHA256 是 TLCP、数字签名及验证、消息认 证码生成及验证、随机数生成、 密钥扩充 Sm4 GM/T 0002-2012 ISO/IEC WD1 18033- 3/AMD2 分组加解密 分组加 密 128 AES128,但 是更多次轮询 256 位,其中使用了异或、模、模加、移位、与、或、非运算,由填充、迭代过程、消息扩展和压缩 函数所构成。 • 保证信息的完整性。 • 在商用密码体系中,SM3 主要用于数字签名及验证、消息认证码生成及验证、随机数生成、密钥 扩充等。据国家密码管理局表示,其安全性及效率要高于 MD5 算法和 SHA-1 算法,与 SHA- 256 相当。 • SM3 将对长度为l(l < 2^64) 比特的消息 2%,High 及 Critical 问题的 46.7%。 Low Medium High Critical Total 解引用空指针 0 6 1 0 7 协议漏洞 1 0 0 0 1 实现逻辑错误 7 5 4 1 17 计算溢出 0 0 1 0 1 缓冲区溢出 0 1 3 1 5 内存损坏 0 2 1 1 4 指令注入 0 0 0 2 2 Total 8 14 10 5 370 码力 | 44 页 | 3.70 MB | 1 年前3
应用 waPC (rust) 做软件测试工具bytes, send /continue back to host • Else send a list of TCP items TCP MITM 例子 • 模拟数据规则 • 自动化测试 • 验证功能 Assertion • 稳定环境 Stable environment • 报告能力(例如 junit) Reporting Basic API testing requirement API standin for wasm • 可用 Javascript 在游览器里面 模拟数据 • 发 RPC 请求 • 可以上传 proto 文档 • 可以验证数据 前段链接 Wasm Mock Server 随机 waPC 注册逻辑 Use wasm without fear 支持以 websocket 代替 wasm 协议 • 不可能为每个 websocket 链接编程新的 wasm0 码力 | 30 页 | 2.50 MB | 1 年前3
Rust 语言学习笔记景下的操作方式。即这个类型在这种场景下,必然执行的是“简单内存拷贝” 操作,这是由编译器保证的,程序员无法控制。Clone trait 里面的 clone 方 法究竟会执行什么操作,则是取决于程序员自己写的逻辑。一般情况下,clone 方法应该执行一个“深拷贝”操作,但这不是强制的,如果你愿意,也可以在 里面启动一个人工智能程序,都是有可能的。 5.如果你确实需要 Clone trait 执行“深拷贝”操作,编译器帮我们提供了一 OS X 里的 Framework 5.1.2.4 条件编译 有时候,我们想针对不同的编译目标来生成不同的代码,比如在编写跨平台模块时, 针对 Linux 和 Windows 分别使用不同的代码逻辑。 条件编译基本上就是使用 cfg 这个属性,直接看例子 #[cfg(target_os = "macos")] fn cross_platform() { // Will only 异步通道与同步通道 Rust 的标准库其实提供了两种类型的通道:异步通道和同步通道。在前面使用 的都是异步通道。异步通道指的是:不管接收者是否正在接收消息,消息发送 者在发送消息时都不会阻塞。为了验证这一点,我们尝试多增加个线程来发送 消息: use std::sync::mpsc; use std::thread; // 线程数量 const THREAD_COUNT :i32 =0 码力 | 117 页 | 2.24 MB | 1 年前3
Comprehensive Rust(简体中文) 202412赋值之后,p1 和 p2 都拥有自己的数据。 • 我们还可以使用 p1.clone() 显式复制数据。 复制和克隆是两码事: • 复制是指内存区域的按位复制,不适用于任意对象。 • 复制不允许自定义逻辑(不同于 C++ 中的复制构造函数)。 • 克隆是一种更通用的操作,也允许通过实现 Clone trait 来自定义行为。 • 复制不适用于实现 Drop trait 的类型。 在上述示例中,请尝试以下操作: lint(包括默认拒绝 lint)。 请注意,带有 help: ... 的错误或警告可以通过 cargo Fix 或编辑器进行修复。 27.4 练习:卢恩算法 卢恩算法 卢恩算法用于验证信用卡号。该算法将字符串作为输入内容,并执行以下操作来验证信用卡号: • Ignore all spaces. Reject number with fewer than two digits. • 从右到左,将偶数位的数字 ”,然后“1 + 4 = 5”。 • 将所有未乘二和已乘二的数字相加。 • 如果总和以“0”结尾,则信用卡号有效。 提供的代码提供了一个有缺陷的 Luhn 算法实现,附带两个基本单元测试,用于验证大部分算法是否正确 实现。 Copy the code below to https://play.rust-lang.org/ and write additional tests to uncover0 码力 | 359 页 | 1.33 MB | 11 月前3
共 22 条
- 1
- 2
- 3













