一.安装SEED Labs实验环境
按照网站http://www.cis.syr.edu/~wedu/seed/lab_env.html的要求,安装SEEDUbuntu16.04虚拟机。
二.生成伪随机数
访问如下图所示网页,下载红圈所示的实验指导书,完成全部实验步骤。
三.实验过程
Task 1
加入srand(time)后生成的随机数随时间变化,注释掉之后生成的随机数不变。
由此可知srand(seed)函数用于给rand()函数设定种子;
time函数代表系统标准时间戳1970年1月1日0点0分0秒到当前系统时间经过了多少秒。
Task 2
根据加密文件时间戳,计算两小时内的可能的**,将这些**保存到文本中。
利用虚拟机的共享文件夹,将文本分享到物理机中。
在物理机的python环境中,导入文本,找到**。
Task 3
输入命令后,鼠标移动,打开文档,数值都在不断增加。
Task 4
命令运行后,只要移动鼠标就会产生一行新的输出,不移动不产生。
Question: If a server uses /dev/random to generate the random session key with a client. Please describe how you can launch a Denial-Of-Service (DOS) attack on such a server.
Answer:如果攻击者不断在服务器上发起DOS攻击,会使得/dev/random可用熵被耗尽,那么随机数生成器便无法正常使用了。
Task 5
运行/dev/urandom后不管鼠标有无移动,都不断得在产生随机数。
生成1MB的伪随机数/dev/urandom保存到一个文件,并在这个文件上运行ent,得到,熵=7.999846;
最佳压缩会减小这个1048576字节的文件的大小的0%;
1048576个样本的卡方分布是223.38,随机超过该值的概率为92.41%;
数据字节的算术平均值是127.5170(127.5 = random);
Pi的蒙特卡洛值是3.137775947(误差0.12%);
序列相关系数是0.001124(完全不相关=0.0);
可分析得随机数生成质量良好。
Please modify the above code snippet to generate a 256-bit encryption key. Please compile and run your code; print out the numbers and include the screenshot in the report.
最后按照上述要求生成**。
四.实验总结
1.可以使用C语言标准库中的random函数来为对称加密算法生成**吗?为什么?
不可以,用srand(seed)函数设置种子后的random()函数得到的随机数是可预测的,这样不安全。
2.在Unix(或Linux)系统中如何生成安全的伪随机数?
在linux中,我们将物理操作产生的随机数据存储到一个随机池中,然后利用这两个设备/dev/random和/dev/urandom将随机性转化为伪随机数。
3.What are the main differences of CSRF and XSS attacks? They both have “cross site” in their names.
XSS攻击跨站脚本攻击(Cross Site Scripting),一般是在输入的时候,攻击者输入脚本,来进行攻击。CSRF跨站点请求伪造(Cross-Site Request Forgeries),也就是冒充用户请求,用户并不知情,然后搞破坏。本质上讲,XSS 是代码注入问题,CSRF 是 HTTP 问题。XSS 是内容没有过滤导致浏览器将攻击者的输入当代码执行。CSRF 则是因为浏览器在发送 HTTP 请求时候自动带上 cookie,而一般网站的 session 都存在 cookie里面。