什么是peaq

区块链网络,类似物联网中的以太坊

Rust

环境安装

cargo是rust的包管理器

  1. 下载rustup
  2. 安装MSVC或MingGW
  3. 运行rustup,安装rustc和cargo

I/O

宏规则

println!()print!():前面的换行

1
print!("x = {0}", x)

数据类型

整型:i32有符号32位,u64无符号64位

浮点数:默认64位精度

布尔型

字符:一个char有4个字节,用utf-8表示

元组:()

数组:[]

函数

传入参数时需指定类型

1
2
3
fn foo(x:i32, y:u64){
print!(x, y)
}

函数体表达式:块中最后为一个没有;的表达式,用来返回值

1
2
3
4
fn foo(x:i32) -> i32 {
x+1
return x+1;
}

条件语句

条件表达式必须为布尔型,不适用c++中的“非0即真”

可用if-else结构和函数体表达式实现a?b:c的效果

循环语句

for(int i=0; i<10; i++){}的用法,用while i<10 {i=i+1}代替

可以for x in array.iter(){}for x in 0..5 {}

无限循环:loop{break ret;},ret为返回值

重影

重影:指变量的名称可以被重新使用的机制

不可变变量:let a = 123;

可变变量:let mut a = 123;

常量:const a = 123;

重影与可变变量:重影可改变变量的类型,可变属性和值,而可变变量仅可改变值

所有者

为了让 Rust 在编译阶段更有效地分析内存资源的有用性以实现内存管理而诞生的概念

所有权有以下三条规则:

  • Rust 中的每个值都有一个变量,称为其所有者。
  • 一次只能有一个所有者。
  • 当所有者不在程序运行范围时,该值将被删除。

变量范围:从声明变量开始有效直到变量所在域结束

移动

1
2
let a = xxx;
let b = a;

对以上情况有:

  1. 栈中:基本数据,直接复制成两份数据,比如整型,浮点数等等
  2. 堆中:不定长数据,将释放前一变量,比如string等等

克隆

对于上面堆中数据确实需要复制成两份的情况,可以这样做:

1
2
let a = String::from("helloRust");
let b = a.clone();

传参

同移动,基本数据传完后依旧可以使用,不定长数据传完即被移动

引用

1
2
let s1 = String::from("hello");
let s2 = &s1;

这里s1并不会被释放,s2指向s1,s1再指向堆中的数据。

引用仅租借所有权,如果所有权移动了则需要重新租借。

可变引用可以修改原变量的值let b = &mut a;

可变引用不允许多重引用,但不可变引用可以。

垂直引用

指针指向NULL或者被释放的变量。

Rust中不允许垂直指针存在。

切片

let part = &str[0..5];

切片结果必须是引用类型。

..yx....都是符合语法的。

被切片的变量禁止修改值。

String和str:不一样的类型,切片结果都是&str类型

可以通过&string[..]将String转换成str

结构体

1
2
3
4
5
6
7
8
9
10
struct Foo{
name: String,
Age: u32
}
// 定义Foo
let a = Foo{
name: String::from("henry"),
Age: 18
};
//实例化Foo
1
2
3
4
5
6
7
//结构体更新
let b = Foo2{
name: String::from("five"),
..a
};
//b的Age和a不同,其他字段相同
//能不能完全复制,直接..a
1
2
3
4
5
//元组结构体
struct Color(u8, u8, u8);
let black = Color(0,0,0)
//通过下标访问
println!("{}", black.1);
1
2
3
4
5
6
7
8
9
10
//输出结构体
#[derive(Debug)]

struct Rectangle {
width: u32,
height: u32,
}

println!("{:?}", Rectangle);
println!("{:#?}", Rectangle);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//结构体方法
impl Rectangle {
fn area(&self) -> u32 {
self.width * self.height
}
}
//结构体关联函数,不依赖实例
impl Rectangle1 {
fn create(width: u32, height: u32) -> Rectangle {
Rectangle{width, height}
}
}

fn main() {
let rect1 = Rectangle { width: 30, height: 50 };
println!("rect1's area is {}", rect1.area());
}

生命周期

重要,但没细看qaq

1
2
3
4
//生命周期注释
&i32 // 常规引用
&'a i32 // 含有生命周期注释的引用
&'a mut i32 // 可变型含有生命周期注释的引用

静态生态周期:'static,生命周期为程序运行期间

1
2
3
4
5
6
7
8
9
10
11
12
13
//泛型+特性+生命周期
use std::fmt::Display;

fn longest_with_an_announcement<'a, T>(x: &'a str, y: &'a str, ann: T) -> &'a str
where T: Display
{
println!("Announcement! {}", ann);
if x.len() > y.len() {
x
} else {
y
}
}

泛型与特性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//函数中泛型
fn max<T>(array: &[T]) -> T {
let mut max_index = 0;
let mut i = 1;
while i < array.len() {
if array[i] > array[max_index] {
max_index = i;
}
i += 1;
}
array[max_index]
}
//<T>
//可以用<T1, T2>表示不同数据类型

//结构体,枚举类和方法中泛型
//struct Foo<T>{}
//impl<T> Foo<T>{}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//特性
trait Descriptive {
fn decribe(&self) -> String {
//默认特性
String:: from("[Object]")
}
}

struct Foo {
name: String,
age: u8
}

impl Descriptive for Foo {
fn describe(&self) -> String{
//重新定义特性
format!("{} {}", self.name, self.age)
}
}
//特性作为函数参数,这样在函数内可调用该特性规范的方法
fn output<T: Descriptive>(object: T) {
println!("{}", object.describe());
}
fn output_two<T: Descriptive>(arg1: T, arg2: T) {
println!("{}", arg1.describe());
println!("{}", arg2.describe());
}
//多个特性
fn notify(item: impl Summary + Display)
fn notify<T: Summary + Display>(item: T)
//可以简化
fn some_function<T, U>(t: T, u: U) -> i32
where T: Display + Clone,
U: Clone + Debug
//特性做返回值,
//特性做返回值只接受实现了该特性的对象做返回值
//且在同一个函数中所有可能的返回值类型必须完全一样
fn person() -> impl Descriptive {
Person {
name: String::from("Cali"),
age: 24
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//泛型+特性例子
trait Comparable {
fn compare(&self, object: &Self) -> i8;
}

fn max<T: Comparable>(array: &[T]) -> &T {
let mut max_index = 0;
let mut i = 1;
while i < array.len() {
if array[i].compare(&array[max_index]) > 0 {
max_index = i;
}
i += 1;
}
&array[max_index]
}

impl Comparable for f64 {
fn compare(&self, object: &f64) -> i8 {
if &self > &object { 1 }
else if &self == &object { 0 }
else { -1 }
}
}

fn main() {
let arr = [1.0, 3.0, 5.0, 4.0, 2.0];
println!("maximum of arr is {}", max(&arr));
}

课程作业:

科目 作业 ddl
电子商务安全 none
人工神经网络 期中项目 5.15
网络协议逆向 hw5 wait
云计算技术 lab2 5.24
计算机视觉 hw2 5.20
专业综合实践 jsp1 & jsp2 5.7 & 5.10

培养方案

准备按着培养方案整理一下

数学课程

数学分析

高等代数

离散数学

概率论

信息安全数学基础(数论+抽象代数)

信号与系统

信息论

现代密码学

图论

专业课程

C/C++

计算机组成原理

数据结构与算法

操作系统原理

计算机网络

人工智能原理

移动互联网

数据库系统

计算机体系结构

分布式系统

模式识别与计算机视觉

人工神经网络

云计算技术

专业综合实践

网络安全技术

电子商务安全

网络协议逆向分析

屁用没有

PS. 个人感觉

讲座

数字电路

大学物理

工程训练

工具

MetaMask:区块链钱包

Ganache:测试链

Remix/VSCode:编辑器

HardHat/Truffle:区块链框架

Web3.js/Ethers.js:和本地或远程以太坊节点进行交互的JS库,用于开发DApp

React/Vue:前端框架

scan:区块链浏览器,用于查询区块链上的信息

chainlink:去中心化的预言机网络,将智能合约安全地连接到链下网络

openzeppelin:智能合约库

slither/securify:审计工具

疑惑

  1. Truffle,Ganache,Web3.js和React怎么结合起来用?
  2. Geth和这些工具的关系?

最近有点太放松了,面试完歇了两天,考完试歇了两天,现在眼前一堆ddl。

课程作业:

科目 作业 ddl
电子商务安全 none
人工神经网络 期中项目 5.15
网络协议逆向 none
云计算技术 hw3 5.3
计算机视觉 hw1 & hw2 4.30 & 5.20
专业综合实践 jsp1 5.7

网络安全技术名词汇总

信息安全

computer security: 保持机密性,完整性和可用性(CIA)

confidentiality:机密性

integrity:完整性

availability:可用性

authentication:鉴别性

accountability:问责

security attack:损害信息安全的动作

security mechanism:检测,预防安全攻击或从安全攻击中恢复的步骤

security service:用来抵御安全攻击,通过安全机制来提供服务

design principle:

  1. Economy of mechanism
  2. Fail-safe default
  3. Complete mediation
  4. Open design
  5. Separation of privilege
  6. Least privilege
  7. Least common mechanism
  8. Psychological acceptability
  9. Isolation

attack surface:network, software, human

系统安全

authentication:端点鉴别

authorization:授权

auditing:审计,判断动作是否允许

access control mechanism(ACM): ACLs or Capabilities

Trusted Computing Base(TCB): 不可绕过,防篡改,尽可能简单

设计原则:同信息安全,KISS

网络安全

network security:机密性,端点鉴别,消息完整性,可访问性与可用性

唯密文攻击:只有密文

已知明文攻击:已知一部分明文及其密文

选择明文攻击:可以选择一段明文并得到对应密文

对称加密,公钥加密

单表代换和多表代换

RSA:p和q,n和z,e和d

会话密钥:就是一个对称的,共享的密钥,用公钥加密来传输

authentication:几个ap

  1. ap1:直接说
  2. ap2:带IP地址
  3. ap3:带密钥
  4. ap3.1:带加密后的密钥
  5. ap4:带nonce,bob发送一个nonce给alice,alice加密后发送给bob
  6. ap5:发回的nonce用alice的私钥加密

数字签名:用自己的私钥加密,有时先hash再加密,即K-(H(m))

消息认证码MAC:计算hash值,有时会带上密钥,即H(m||s)

校验和:略

证书颁发机构CA:略

安全邮件:三部分,签名,消息和会话密钥

  1. 签名:先hash再用私钥加密
  2. 消息:和签名一起被会话密钥加密
  3. 会话密钥:用bob的公钥加密

类SSL:握手,密钥导出和数据传输

  1. 握手:创建TCP连接,验证身份,发送主密钥(MS)
  2. 密钥导出:使用MS生成4个密钥(两个会话加密密钥,两个会话MAC密钥)
  3. 数据传输:SSL将数据分割成记录,对每个记录附加一个MAC(=H(数据, MAC密钥))用于完整性检查,然后用会话加密密钥加密"记录+MAC"

将流分成多个记录,每个记录计算MAC

防止replay攻击,使用seq,MAC为H(数据||密钥||seq)

防止TCP关闭连接的攻击,使用内容类型,MAC为H(数据||密钥||seq||类型)

实际SSL的握手

  1. 先创建TCP连接
  2. 客户发送支持的算法列表,以及一个nonce
  3. 服务器选择一个对称算法,一个非对称算法和一个MAC算法。返回算法,证书和一个nonce
  4. 客户验证证书并提取公钥,生成一个前主密钥(PMS),发送用服务器公钥加密过的PMS
  5. 客户和服务器分别从PMS和不重数中计算出主密钥(MS),然后将该MS切片以生成4个密钥
  6. 客户发送所有握手消息的MAC
  7. 服务器发送所有握手消息的MAC

这里有个疑问:用PMS和nonce计算MS的具体操作?

IPsec:提供机密性、源鉴别、数据完整性和重放攻击防护

VPN:虚拟专用网

transport mode:传输模式,点到点

tunnel mode:隧道模式,路由器

AH:鉴别首部,提供源鉴别,数据完整性,无机密性

ESP:封装安全性载荷,提供源鉴别,数据完整性和机密性

SA&SAD:安全关联数据库,2+2n,包含以下:

  1. SPI
  2. 双方接口(IP)
  3. 加密类型和对应密钥
  4. 完整性检查类型和对应密钥

SPI:安全参数索引,SA标识符

IPsec数据报结构见《网络安全技术3》

SPD:安全策略库,指示哪些数据报将被IPsec处理,使用哪个SA

IKE:因特网密钥交换,自动生成SA,有以下两个阶段:

  1. 第一个阶段是两次报文对的交换:
    1. 第一次交换生成一次双向IKE SA,创建用于IKE SA的密钥
    2. 第二次交换。。。
  2. 第二个阶段在两侧生成了两个单向的SA

WEP:有线等效保密

  1. 计算ICV,得出数据帧
  2. 密钥和IV得出密钥流
  3. 数据帧和对应密钥异或加密

firewall:防火墙,有以下目标:

  1. 所有流量通过防火墙
  2. 仅授权流量通过
  3. 自身防渗透

stateless packet filter:无状态过滤器

state packet filter:状态过滤器,可以追踪连接来核对连接

IDS:入侵检测系统,检测到可疑流量后产生告警

IPS:入侵防止系统,滤除可疑流量

Network Security Review

十分的乱

slide 1

all the aspect of security

such as network security, system security

computer security

computer secutrity: preserve integrity, availability and confidentiality

confidentiality:

  1. data confidentiality: data is not available to others
  2. privacy:

integrity: 在信息获取与披露上的权限控制

  1. data integrity: assure data only be changed in a specified and authorized manner
  2. system integrity: 确保系统以不受损害的方式执行其预期功能,不会有意或无意地未经授权操纵系统

availability: 系统正常工作且服务可用

authenticity: 真实性,entity is the one that it claims to be

accountability: 问责

security architecture

security attack, security mechanism and security service

security attack: 损害信息安全性的操作

security mechanism: 检测,防止攻击或从攻击中恢复的过程

security service: 加强安全性的服务,对抗攻击,利用机制来提供服务

principles

economy of mechanism

Fail-safe default: 白名单

Complete mediation: 完全中介,所有访问必被检查

open design: 设计公开

separation of privilege: 权限分离,不同用户不同权限

least privilege: 最小权限

least common mechanism: 最少共享

attack surface

网络,软件和人

open ports

service

code

interface

employee

slide 2

a slide of chapter 8

网络安全

network security:

  1. confidentiality
  2. authenticaiton
  3. message integrity
  4. access and availability

窃听,伪造,插入,替换,阻止

密码学知识

密码学知识:古典,对称,非对称

消息完整性与端点鉴别

authentication: ap

消息完整性:数字签名

MAC=H(m||s),s为共享密钥

签过名的消息为m+K-(H(m))

别的

安全邮件:签名+消息+会话密钥

SSL

IPsec

SPD:哪些数据报被IPsec处理且被哪个SA处理,怎么处理等等信息。

IKE两个阶段:。。。

wlan

operational security

slide 3

额外讲的系统安全。

authentication:真实性,用户是否伪装

authorization:授权

audit:审计

ACLs: access control lists

capabilities

TCB: trusted computing base,可信计算基;不可被绕过,防篡改,verifiable(简单点)

设计原则:KISS,Fail safe Default,Complete Mediation

P66后略

slide 4

和PPT2有许多重复的,多了些应用层的内容。

slide 5

前25页在slide2和slide4中出现过,主要讲网络层安全。

相较于课本,多了许多内容,比如说BGP。。。

ARD: 自治路由域,AS是其中一种

AS间协议:BGP

and a lot

slide 6

wlan security

slide 7

cellular network security 4G 5G

slide 8

operational security

firewall, IDS, IPS

slide 9

SDN

好烦啊,不想考试qaq

每次考试,考试前那阵子都陷入一种低效内耗的状态,学的不明不白的,过了一遍,懂了个大概,细节又没弄清。

怕老师考得广,又怕老师考得深,还没个资料做参考,烦死了。

电子商务安全——考试

人工神经网络——项目

网络协议逆向——项目

云计算技术——实验,考试

网络安全技术——4.26

计算机视觉——实验4.30,实验5.20,论文

专业综合实践——实验4.26,项目


夏令营——数学,专业,英语,coding

实习——技术栈学习


  1. coding practice
  2. course
  3. review math and ...
  4. study bc

by the way, 需要捋一下blog目录,有点乱

反馈

  1. 下半学期事情变多,各方面需要提前准备
  2. 和班主任开了个班会,捋一下

纠正

  1. 待办事项
  2. 大家提的问题一部分是自己的选择问题,另一部分如下:
    1. 保研考研面试问题:不仅限于408,取决于老师方向,所以关注一下数学和课程。
    2. 简历中的经历:不如专精,要熟悉简历上的每个项目,经得起问。
    3. copy下来的项目
0%