实验报告

实验一 密码引擎-1-OpenEuler-OpenSSL编译

一、任务详情

  1. 安装Ubuntu和OpenEuler虚拟机
  2. 下载最新的OpenSSL源码(1.1版本)
  3. 用自己的8位学号建立一个文件夹,cd 你的学号,用pwd获得绝对路径
  4. 参考 https://www.cnblogs.com/rocedu/p/5087623.html 先在Ubuntu中完成OpenSSL编译安装,然后在OpenEuler中重现
    ./config --prefix=..(学号目录的绝对路径)指定OpenSSL编译链接
  5. 提交 test_openssl.c 编译运行截图
  6. 加分项:在Windows中编译OpenSSL,记录编译过程,提交相关文档(推荐MarkDown格式)

二、Linux下OpenSSL的安装

(一)环境

  • Ubuntu 22.04
  • OpenSSL 1.1.1t
    Ubuntu最新版本下载参见http://www.ubuntu.com/download/。
    OpenSSL最新版本下载参见http://www.openssl.org/source/。

(二)安装过程

1.首先解压源代码:

tar xzvf openssl-1.1.1t.tar.gz

2.然后进入源代码目录:

cd openssl-1.1.1t

3.然后使用下列命令编译安装:

./config
make
sudo make install

三、用自己的8位学号建立一个文件夹,cd 你的学号,用pwd获得绝对路径

四、参考 https://www.cnblogs.com/rocedu/p/5087623.html 先在Ubuntu中完成OpenSSL编译安装,然后在OpenEuler中重现

./config --prefix=..(学号目录的绝对路径)指定OpenSSL编译链接

五、提交 test_openssl.c 编译运行截图

(一)编译

gcc -o test_openssl test_openssl.c -I/usr/local/ssl -L/usr/local/lib -lcrypto -ldl -lpthread

(二)执行,结果打印0

./test_openssl;echo $?

实验一 密码引擎-2-电子钥匙功能测试

一、任务详情

0 参考附件中的视频
1 解压"资源"中“龙脉密码钥匙驱动实例工具等”压缩包
2 在Ubuntu中运行 “龙脉密码钥匙驱动实例工具等\mToken-GM3000\skf\samples\linux_mac”中例程,提交运行结果截图
3 加分项:运行“龙脉密码钥匙驱动实例工具等\mToken-GM3000\skf\samples\windows”中例程,提交运行结果截图

二、在Ubuntu中运行 “龙脉密码钥匙驱动实例工具等\mToken-GM3000\skf\samples\linux_mac”中例程,提交运行结果截图

三、加分项:运行“龙脉密码钥匙驱动实例工具等\mToken-GM3000\skf\samples\windows”中例程,提交运行结果截图

1.安装U盘内的GM3000_Setup.exe


2.龙脉密码钥匙驱动实例工具等\mToken-GM3000\skf\samples\windows\EncryptData\EncryptData.sln


3.测试签名:龙脉密码钥匙驱动实例工具等\mToken-GM3000\csp\samples\CryptAPI\VC\Sign_Verify\Signa_Verify.sln

实验一-密码引擎-3-加密API研究

任务详情

密码引擎API的主要标准和规范包括:
1 微软的Crypto API
2 RAS公司的PKCS#11标准
3 中国商用密码标准:GMT 0016-2012 智能密码钥匙密码应用接口规范,GMT 0018-2012密码设备应用接口规范等

研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交博客链接和代码链接。
内容:
0 查找各种标准的原始文档,研究学习(至少包含Crypto API,PKCS#11,GMT 0016-2012,GMT 0018-2012)(5分)
1 总结这些API在编程中的使用方式(5分)
2 列出这些API包含的函数,进行分类,并总结它们的异同(10分)
3 以龙脉GM3000Key为例,写出调用不同接口的代码(Crypto API,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接(10分)

一、 Crypto API

微软的CryptoAPI是Win32平台下为应用程序开发者提供的数据加密和安全的编码接口。CryptoAPI函数集包含了基本的ASN.1的编码、解码,散列,数据加密和解密,数字证书管理等重要的密码学应用功能。数据的加密、解密支持对称和非对称两类算法。CryptoAPI是所有微软的Win32的应用程序以及第三方厂商应有程序使用的数据加密接口,诸如Internet Explorer、OutLook、Adobe等应用都是基于CryptoAPI开发的。

1.1 Crypto API在编程中的使用方式

CryptoAPI本身不实现密码运算相关操作,而是操作系统通过调用CryptoSPI函数接口相应的加密服务提供者函数(CSP)来实现。CryptoAPI函数使用“加密服务提供者”(CSP)完成数据加密、解密以及密钥的存储管理、所有的CSP都是相互独立的模块。理论上,CSP应该独立于特定的应用程序,也就是说所有的应用程序可以使用任何一个CSP。但是,实际上有些应用程序只能与特定的CSP协作。CSP与应用程序之间的关系类似于Windows GDI模型。CSP就类似于图形硬件驱动程序。
img

1.2Crypto API包含的函数

CryptoAPI体系主要由以下几部分组成:

基本加密函数、证书编码与解码函数、证书存储函数、简化信息处理函数、底层信息处理函数。

1.2.1基本加密函数

服务提供者函数
img
密钥的产生和交换函数
img
编码/解码函数
img
数据加密/解密函数
img
哈希和数字签名函数
img

1.2.2 证书和证书库函数

这组函数是管理、使用和取得证书、证书撤销列表和证书信任列表。

证书库函数:一个用户站点可以收集许多证书。这些证书是为这个站点的用户所使用的,证书描述了这个用户的具体身份。对于每个人,可能有一个以上的证书。证书库和其相关的函数提供了对库获得、枚举、验证和使用证书库里的信息。
img
img
维护函数
img
证书函数
img
img
证书撤销列表函数
img

1.2.3 证书验证函数

证书验证是通过CTL 和证书列表进行的.
使用CTL的函数
img
证书链验证函数
img

总结这些API在编程中的使用方式

(一)Crypto API
使用CryptoAPI编写一个文件保护程序,具有如下功能:

(1)给定明文文件,生成加密文件,同时产生文件的数字签名文件;

(2)给定密文文件,解密出明文文件,并验证签名的正确性。

在不安全的网络上进行安全的数据传输涉及三个方面的要求:信息隐藏,身份鉴别和完整性检验。CryptoAPI除了提供上述三个功能外还提供标准的ASN.1编码、解码,信息解密,数字证书和证书存储区的管理,证书信任列表、吊销列表和证书有效性检查等功能。

信息隐藏
信息隐藏的意义是保障信息内容只能被特定的人获取。信息隐藏通常是使用某种形式的密码学方式。数据加密算法能保障信息的安区隐藏和传输。数据加密算法是将明文数据经过一定的变换使其看上去是一组毫无意义的数据。在没有加密密钥的情况下,对于好的加密算法想从密文获取明文信息是不可能的。被加密的数据可以是任意的ASCII编码文本文件,数据库文件,和任意需要进行安全传输的数据。这里,“信息”是指任意的一段数据,“明文”是指任意一段没有被加密的数据,“密文”是指任意一段加密的数据。被加密的数据可以在不安全的通道上进行传输而不伤害其安全性。之后,密文可以被还原成明文.

数据加密和解密的概念是:对数据加密的时候需要一个加密密钥,相当于门上的一把钥匙。解密的时候,需要使用一个解密密钥来解开数据。加密密钥、解密密钥可以相同也可以不相同。
加密密钥必须小心保存,给其它用户的时候也必须通过安全的通道传递。对解密密钥的访问权限必须小心控制,因为拥有解密密钥意味着可以解开所有相应加密密钥加密的信息。

身份鉴别
安全通讯的前提是通讯的双方知道对方的身份。身份鉴别的任务就是鉴别一个用户或者实体的真实身份。标识用户身份的文档通常被称为信任状或者凭证。

身份鉴别有时候也用来判定接受的数据就是被发送的数据。如果A向B发送了一段数据,B需要鉴别这段数据就是A发出去的,而不是其它冒充A发出去的。为了满足这类验证的需求,CryptoAPI提供数字签名和校验函数,用来对信息进行鉴别。

因为在计算机网网络上传输的数据与用户之间并没有物理连接,因此对数据进行鉴别的凭证也必须能够在网络上进行传输。这种凭证必须由受信任的凭证发行机构发行。

数字证书就是平常说的证书就是这种凭证,是计算机在网络上进行身份验证的有效凭证。

数字证书是由一个被称为证书机构的信任组织或实体颁发的凭证。它包含与证书对应的用户公钥以及其它一些记录证书主题和用户信息的数据。证书机构只有在验证了证书主题和证书对应的用户公钥的有效性之后才会签发证书。

证书申请者和证书机构之间交换签发证书信息可以使用物理介质,比如软盘,进行传输。通常,这种信息都是在计算机网络上进行完成的。证书机构使用被信任的服务程序处理用户的请求和证书的签发工作。

完整性检测
任何通过不安全介质传输的信息都可以被意外或蓄意的修改。在现实世界中,盖章、签名就是用来提供和证明信息完整性的工具。

信息的接收者不但需要确定信息是由谁发送的,还要确定自己收到的信息是发送者发送的信息,而没有任何的变化。要建立数据的完整性检测机制,不仅要发送信息本身,还要发送用来校验数据的信息,这一信息通常被称作哈希值。数据和验证信息都可以与数字签名一起发送来证明其完整性。

二、PKCS#11

架构

img

会话状态

img

对象

img

机制

根据机制标记,可以分为几类:
CKF_ENCRYPT:加密类
CKF_DECRYPT:解密类
CKF_DIGEST:摘要类
CKF_SIGN:签名类
CKF_SIGN_RECOVER:可恢复签名类
CKF_VERIFY:验证类
CKF_VERIFY_RECOVER:可恢复验证类
CKF_GENERATE:密钥产生
CKF_GENERATE_KEY_PAIR:密钥对产生
CKF_WRAP:密钥封装
CKF_UNWRAP:密钥解封
CKF_DERIVE:密钥派生
img

操作

img
Cryptoki 为一个或多个密码设备提供一个接口,这些设备通过大量的槽在系统中运行。每个对应于一个物理阅读器或另一个设备接口的槽可包含一个令牌。当一台密码设备存在于阅读器中,一个令牌就存在于该槽中。当然,由于Cryptoki提供槽和令牌的逻辑视图,所以可能有其它的物理译码。多个槽可能共享一个阅读器。问题在于一个系统有相当多的槽,应用程序能连接到这些槽的其中任何一个或全部槽的令牌上。

密码设备可以按照某一命令集执行某些密码操作,这些命令通常要经过标准设备驱动程序,例如PCMCIA卡服务程序或槽服务程序。Cryptoki 使每个密码设备看起来逻辑上很象其它设备,而不管什么技术实现的。因此,应用程序不必直接与设备驱动器接口(或甚至不必知道包括那些设备);Cryptoki 隐藏了这些细节。的确,基础设备完全能用软件来实现,(例如,在一个服务器上运行的处理程序),不须专用硬件。

Cryptoki 或许可以作为支持接口功能的库来实现,而应用程序则与该库连接。应用程序可以直接与Cryptoki 连接,或者,Cryptoki 是一个所谓的“共享”库(或动态连接库),在这种情况下,应用程序动态地连接库。用Microsoft Windows和OS/2操作系统可以比较容易地生成数据库,并且在UNIX和DOS中也可相对容易地生成“共享”库。

由于新库可以使用,所以动态方法有许多优点;但从安全的角度来说,也有一些缺点。要特别指出的是,如果库能较容易地被替换,攻击者有可能用恶意制造的假库取而代之,以截取用户的PIN。即使编码签名技术能防止许多动态连接的安全危险,从安全角度来说,一般采用直接连接。总之,应用程序和Cryptoki 库之间的程序设计接口是相同的。

设备的种类和所支持的能力的种类将取决于专用Cryptoki 库。本标准只定义库的接口,不定义库的特征。要特别指出的是,并不是所有的库支持这个接口(因为不是所有的令牌支持所有的机制)中定义的机制(算法)。并且库也许只支持可使用的所有密码设备的一个子集。(当然,可以预料更多更好的设备种类将被开发,以支持多种令牌,而不是单个供应商提供的令牌。)只要开发出应用程序,就会形成Cryptoki 的接口、标准数据库和令牌“轮廓”。

三、令牌的逻辑视图

Cryptoki的令牌逻辑视图是一个能存储对象和能执行密码函数的设备。Cryptoki定义如下三个对象:数据、证书和密钥。数据对象由应用程序定义。一个证书对象存储一个证书。一个密钥对象存储一个密码密钥。密钥可以是一个公共密钥、一个私钥或是一个保密密钥,每个种类的密钥在专用机制中使用其的辅助型。令牌的这种逻辑视图如下图所示:
img

GM/T 0016-2012

3.1 简介

这个标准规定了基于PKI密码体制的智能密码钥匙密码应用接口,描述了密码应用接口的函数、数据类型、参数的定义和设备的安全要求。

3.2 结构模型

层次关系:智能密码钥匙密码应用接口位于智能密码钥匙应用程序与设备之间
img
设备的应用结构:一个设备中存在设备认证密钥和多个应用,应用之间相互独立。设备的逻辑结构如下图:
img
设备管理系列函数
img
访问控制系列函数
img
应用管理函数
img
容器管理系列函数
img
密码服务系列函数
img
img

四、GMT 0018-2012

本标准的目标是为公钥密码基础设施应用体系框架下的服务类密码设备制定统一的应用接口标准,通过该接口调用密码设备,向上层提供基础密码服务。为该类密码设备的开发、使用及检测提供标准依据和指导,有利于提高该类密码设备的产品化、标准化和系列化水平。
范围:本标准规定了公钥密码基础设施应用技术体系下服务类密码设备的应用接口标准,适用于服务类密码设备的研制、使用,以及基于该类密码设备的应用开发,也可用于指导该类密码设备的检测。
密码设备应用接口在公钥密码基础设施应用技术体系框架中的位置:在公钥密码基础设施应用技术体系框架中,密码设备服务层由密码机、密码卡、智能密码终瑞等设备组成,通过本标准规定的密码设备应用接口向通用密码服务层提供基础密码服务。如下图:
img
基础密码服务包括密钥生成、单一的密码运算、文件管理等服务。
本标准采用C语言描述接口函数,无特别说明时,函数中参数的长度单位均为字节数。

设备管理类函数:

打开设备:SDF_OpenDevice
关闭设备:SDF_CloseDevice
创建会话:SDF_OpenSession
关闭会话:SDF_CloseSession
获取设备信息:SDF_GetDeviceInfo
产生随机数:SDF_GenerateRandom
获取私钥使用权限:SDF_GetPrivateKeyAccessRight
释放私钥使用权限:SDF_ReleasePrivateKeyAccessRight

密钥管理类函数:

导出 RSA 签名公钥:SDF_ExportSignPublicKey_RSA
导出 RSA 加密公钥:SDF_ExportEncPublicKey_RSA
产生RSA非对称密钥对并输出:SDF_GenerateKeyPair_RSA
生成会话密钥并用内部RSA公钥加密输出:SDF_GenerateKeyWithIPK_RSA
生成会话密钥并用外部RSA公钥加密输出:SDF_GenerateKeyWithEPK_RSA - 导人会话密钥并用内部RSA私钥解密:SDF_ImportKeyWithISK_RSA
基于 RSA 算法的数宇倍封转换:SDF_ExchangeDigitEnvelopeBaseOnRSA
导出 ECC 签名公钥:SDF_ExportSignPublicKey_ECC
导出 ECC 加密公钥:SDF_ExportEncPublicKey_ECC
产生ECC非对称密钥对并输出:SDF_GenerateKeyPair_ECC
生成会话密钥并用内部ECC公钥加密输岀:SDF_GenerateKeyWithIPK_ECC - 生成会话密钥并用外部ECC公钥加密输出:SDF_GenerateKeyWithEPK_ECC
导入会话密钥并用内部ECC私钥解密:SDFJmportKeyWithlSKJECC
生成密钥协商参数并输出:SDF_GenerateAgreementDataWithECC
计算会话密钥:SDF_GenerateKey WithECC
产生协商数据并计算会话密钥:SDF—GenerateAgreementDataAndKeyWithECC
基于 ECC算法的数字信封转换:SDF_ExchangeDigitEnvelopeBaseOnECC
生成会话密钥并用密钥加密密钥加密输出: SDF_GenerateKeyWithKEK
导入会话密钥并用密钥加密密钥解密:SDF_ImportKeyWithKEK
销毁会话密钥:SDF_DestroyKey

非对称算法运算类函数

部公钥 RSA 运算:SDF_ExternalPublicKeyOperation_RSA
内部公钥 RSA 运算:SDF_InternalPublicKeyOperation_RSA
内部私钥 RSA 运算:SDF_InternalPrivateKeyOperation_RSA
外部密钥 ECC 验证:SDF_ExternalVerify_ECC
内部密钥 ECC 签名:SDF_InternalSign_ECC
内部密钥 ECC 验证:SDF_InternalVerify_ECC
外部密钥 ECC 加密:SDF_ExternalEncrypt_ECC

对称算法运算类函数

对称加密:SDF_Encrypt
对称解密:SDF_Decrypt
计算MAC:SDF_CalculateMAC

杂凑运算类函数

杂凑运算初始化:SDF_HashInit
多包杂凑运算:SDF_HashUpdate
杂凑运算结束:SDF_HashFinal

安全要求

(1)基于本标准设计、开发的密码设备在密钥管理方面,应满足以下要求:
设备密钥的使用不对应用系统开放;
密钥必须用安全的方法产生并存储;
在任何时间、任何情况下,除公钥外的密钥均不能以明文形式出现在密码设备外;
密码设备内部存储的密钥应具备有效的密钥保护机制,防止解剖、探测和非法读取;
密码设备内部存储的密钥应具备权限控制机制,防止非法使用和导出。
(2)密码服务要求:
使用的密码算法应得到国家密码主管部门的批准;
使用国家密码主管部门认可的密码算法芯片;
本标准所列的所有接口函数均应能被应用系统任意调用。
(3)设备状态要求:
密码设备应具有初始和就绪两个状态;
未安装设备密钥的密码设备应处于初始状态,已安装设备密钥的密码设备应处于就绪状态;
在初始状态下,除可读取设备信息、设备密钥的生成或恢复操作外,不能执行任何操作,生成或恢复设备密钥后,密码设备处于就绪状态;
在就绪状态下,除设备密钥的生成或恢复操作外,应能执行任何操作;
在就绪状态下进行的密钥操作,设备操作员应经过密码设备的认证。
(4)其他要求:
密码设备应有安全机制和措施,保证密钥在生成、安装、导入、存储、备份.恢复及销毁整个生存期间的安全,此安全机制可由设备厂商自行设计实现。

五、以龙脉GM3000Key为例,写出调用不同接口的代码(Crypto API,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接

(一)SKF接口

龙脉密码钥匙驱动实例工具等\mToken-GM3000\skf\samples\windows\EncryptData\EncryptData.sln
img
img

(二)Crypto API

1.龙脉密码钥匙驱动实例工具等\mToken-GM3000\csp\samples\CryptAPI\VC\EncryptDecryptFile\EncryptFile.sln
img
img
img
img

2.龙脉密码钥匙驱动实例工具等\mToken-GM3000\csp\samples\CryptAPI\VC\EnumCerts\EnumCerts.sln
img

(三)PKCS#11

1.龙脉密码钥匙驱动实例工具等\mToken-GM3000\pkcs11\windows\samples\PKCStest\PKCStest.sln

(1)DES

img
img

(2)DES3

img

img

(3)RC2

img
img

(4)RC4

img

(5)RSA

img

(6)AES

img

2.龙脉密码钥匙驱动实例工具等\mToken-GM3000\pkcs11\windows\samples\GetUSBInfos\getusbinfos.sln
img

实验一 密码引擎-4-国䀄算法交叉测试

任务详情

0 2人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名
1 在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图
2 在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)
3 在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Hash值,然后用OpenSSL SM2算法计算Hash值的签名,用龙脉eKey进行验签,提交代码和运行结果截图
4 加分项:在Windows中重现上述过程

0 2人一组,创建一个文件,文件名为小组成员学号,内容为小组成员学号和姓名

img
1 在Ubuntu中使用OpenSSL用SM4算法加密上述文件,然后用龙脉eKey解密,提交代码和运行结果截图

img

2 在Ubuntu中基于OpenSSL产生一对公私钥对(SM2算法)

在安装了正确版本的openssl之后,下面就是利用openssl自带的命令生成SM2公私钥对了:

1.创建EC参数和原始私钥文件:
openssl ecparam -out ec_param.pem -name SM2 -param_enc explicit -genkey
img

注:生成完成后可以查看一下EC私钥信息:
openssl ecparam -in ec_param.pem -text
img

然后验证一下参数:
openssl ecparam -in ec_param.pem -check

2.将原始的私钥文件,转换为pkcs8格式:
openssl pkcs8 -topk8 -inform PEM -in ec_param.pem -outform pem -nocrypt -out pri_key_pkcs8.pem

img

3.利用原始的私钥,生成对应的公钥:
openssl ec -in ec_param.pem -pubout -out pub_key.pem
至此SM2的秘钥对已经生成结束,pri_key_pkcs8.pem是SM2私钥,而pub_key.pem是公钥。

3 在Ubuntu中使用OpenSSL用SM3算法计算上述文件的Hash值,然后用OpenSSL SM2算法计算Hash值的签名,用龙脉eKey进行验签,提交代码和运行结果截图

把摘要值放进dgst.txt中:

用sm2的私钥进行签名:
img

实验二 电子公文传输系统安全

任务详情

在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务
浏览附件中的《Core.Software.Security.Security.at.the.Source.CN.软件安全.从源头开始》,《The.Security.Development.Lifecycle.CN.软件安全开发生命周期》两本图书,总结读书笔记,重点是SDLsecurity development lifecycle,安全开发生命周期),小组每人要提交一份自己的笔记(markdown文档,每人一份)
小组讨论电子公文传输系统,如何应用SDL对电子公文系统进行加团,给出一份加固计划书,其中重点要包含系统资源的分析,基于STRIDE模型的威胁分析以及基于DREAD模型的风险分析,人员分工,开发计划(每周至少提交一份进展报告),提交安全性设计方案(markdown文档,每组一份,不要发网上)
参考 《GMT 0007 2012 电子政务电子认证服务应用指南》, GMT 0054-2018 《信息系统密码应用基本要求》和 国家标准GB/T 39786-2021《信息安全技术 信息系统密码应用基本要求》提交一份系统安全性设计报告,重点是密码方案的应用(markdown文档,每组一份,不要发网上)
密码算法库:
龙脉uKey
Bouncy Castle(支持Java )(https://www.bouncycastle.org/latest_releases.html)
GMSSL 的API(支持Java,Go,PHP) http://gmssl.org/docs/docindex.html
OpenSSL

读书笔记

SDL(security development lifecycle),即安全开发生命周期,是一种将安全融入到软件开发过程中的方法,被广泛应用于企业和政府机构的软件开发项目中。学习SDL有助于我们更好地了解安全开发生命周期的概念、原则和最佳实践,以及如何在软件开发中实现安全。

一、安全开发生命周期概述

安全开发生命周期(SDL)是指在软件开发过程中,将安全性作为开发的一个关键目标,并根据需要,设计、开发、测试、部署和维护软件,以确保其安全性。SDL可以从需求分析开始,贯穿整个软件开发过程,直到最后的部署和维护。它包括以下六个基本阶段:

  1. 确定需求
  2. 设计安全性
  3. 编写安全代码
  4. 测试安全性
  5. 发布和部署
  6. 维护和更新

在每个阶段,SDL都会评估系统的安全风险,并采取必要的措施来减轻这些风险。

二、SDL的原则

SDL有一些核心原则,这些原则有助于确保软件开发过程中的安全性。

第一,安全应该是设计和开发的一个关键目标,而不是作为后期添加的一个附加项。

第二,SDL应该始终根据实际情况进行调整。不同的软件项目可能需要采取不同的安全措施。

第三,SDL应该始终保持灵活性。随着技术和威胁的发展,开发人员需要不断修正和更新安全策略。

第四,SDL应该使开发人员能够与安全专家紧密合作。这有助于确保开发人员对最新的安全威胁有所了解,以及在安全方面做出明智的决策。

三、SDL最佳实践

SDL的最佳实践有助于确保系统的安全性。这些最佳实践包括:

第一,在设计阶段就考虑安全。在该阶段,开发人员需要考虑所有可能的安全风险,并采取必要的措施来减轻这些风险。例如,应该考虑如何处理输入数据、如何管理权限和身份验证等问题。

第二,采用安全性最好的编程语言和框架。某些编程语言和框架比其他编程语言和框架更安全。

第三,使用安全的开发工具。开发人员应该使用文档、代码审查、静态代码分析工具等,来帮助减轻安全风险。

第四,进行安全培训。开发团队应该受到充分的安全教育和培训,以了解最新的安全威胁和最佳实践,以及如何防范常见的攻击。

第五,定期进行安全测试。这包括漏洞评估、渗透测试等,可以帮助鉴定可能存在的安全漏洞并提供相应的修复建议。

第六,及时更新软件。开发人员应该随时关注相关的安全性更新和漏洞修补,及时更新软件版本,以修复已知的漏洞和安全问题。

四、SDL的优势

通过采用SDL,开发团队可以实现以下优势:

第一,提高软件的安全性。使用SDL方法可以在软件开发过程中获得更好地安全保障,从而减少相关安全漏洞和风险。

第二,提高生产力。采用SDL方法可以优化软件开发流程,因此可以提高生产效率和质量,并降低相关成本。

第三,提高用户满意度。由于采用SDL方法可以减少安全漏洞和风险,因此可以提高用户对产品安全性的信任感,从而提高用户满意度。

总之,SDL是一种帮助开发团队实现安全性目标的方法,可以通过一系列的步骤和最佳实践来减轻安全风险、提高生产力并提高用户满意度。开发人员应该积极掌握SDL的相关原则和最佳实践,以确保软件开发过程中的安全性。

五、 SDL的实施步骤

SDL的实施包括以下步骤:

第一步,确定需求。在该阶段,需要明确软件需求以及软件的预期用途和目标用户。

第二步,评估风险。在该阶段,需要评估软件可能面临的所有安全风险,并确定如何减轻这些风险。

第三步,设计安全性。在该阶段,需要制定相应的安全策略和安全控制措施,包括身份验证、访问控制、数据转移、数据加密等。

第四步,测试安全性。在该阶段,需要进行各种测试,需要花费多的时间和成本来设计、开发。例如漏洞测试、渗透测试等,以确保软件的安全性。

第六步,发布和部署。SDL要求安全专家和开发人员密切合作,并由阶段专,门的需要安对全软专件进行家提审供指导。这可能会增查并部署到生产加环境中。

第七步,维护和更新。由于安全威胁和安全技术在不断发展,SDL需要持续不断进行更新以应对这些变化威胁和修补程序,并相应地更新安全开发生命周期。

实验二 电子传输系统安全-进展1

任务详情
上周任务完成情况(代码链接,所写文档等)
本周计划

安全性设计方案

系统资源的分析

电子公文传输系统就是利用计算机网络和安全技术,实现政府部门与部门之间、单位与单位之间政府红头文件的起草、制作、分发、接收等功能,以现代的电子公文传输模式取代传统的纸质公文传输模式。若需紧急状况公文立即传输,可能导致重要文件的传输不能按时到达。本项目主要是为了节约人力物力与时间,在相对安全的情况下传输公文。

其中包含的资源主要是信息资源,不同级别的部门和人员查看资源的权限也是不同的,具体如下

  • 部门信息(部门编号、部门名称)
  • 组织信息(组织编号、组织名称)
  • 人员信息(人员编号、登录名、登陆密码、真实姓名、所属角色编号、所属部门编号、职位、电话号码、邮箱、性别)
  • 文件类型信息(类型编号、类型名称)
  • 文件信息(文件编号、文件名称、文件简介、文件链接、发送日期、发送者、接收者、状态、文件类型编号)
  • 其他信息(字体、字号、电子公章等)

以上资源在系统和传送过程中均需进行保密传输,并且在不同的组织和部门下,人员可以查看的信息也是有区别的

为保护安全,我们对用户进行安全性设计如下:

  • 身份认证
  • 数据加密
  • 数字签名
  • 访问控制
  • 证书配置
  • 安全审计

本系统为规范使用,还针对部分功能进行划分:

用户

用户可对公文文件进行发送、接收,对自己的文件浏览、查询、打印等。

  • 公文传输:在安全登录情况下,从电脑中将需处理的公文上传至电子公文系统。
  • 公文管理:使用者根据自己所发布或所接收的文件,按照密级、紧急程度等进行分类归档。
  • 公文加密:将公文使用密码算法加密进行加密发送。
  • 公文接收:对相应接收到的公文进行判断并解密,安全保存至用户公文系统。
  • 公文验证:登录者可根据自己的需求对公文验证。
  • 公文查询:根据签发部门,密级,紧急程度等查询公文。

管理员

管理员可以发布所有文件,普通用户只能阅读自己对应权限下的文件。

用户管理

  • 管理员可增加、删除和修改系统角色信息。
  • 管理员可根据系统设置的安全规则、安全策略对不同级别的用户分配不同的权限。

公文设置管理

  • 管理员可进入后台选择文件列表,查看用户发布及签收文件的情况。
  • 管理员可查询所有发布和接收的公文,可对所有使用者用户发布的文件进行修改。

系统管理

  • 管理员可以对数据进行备份,以便后续审计工作。
  • 管理员可以进行事务配置。

基于STRIDE模型的威胁分析

  • 以电子公文传输系统数据流分析为基础,分析传输及其相关处理过程是否有STRIDE模型中所含有的威胁,识别并记录威胁。针对系统的威胁涉及到处理过程、数据流和数据存储等,通过此方法可识别可能影响应用程序的威胁、攻击、漏洞,进而设计对应的缓解对策,以降低安全风险并满足传输系统的安全。这里根据威胁类型整理出部分可能存在的威胁:
  • Spoofing 欺骗:
    • 威胁描述:涉及非法访问并使用其他用户的身份验证信息,例如用户名和密码。
    • 威胁目标:用户信息
    • 可能使用方式:伪冒用户身份、钓鱼网站、欺骗数据库等(威胁度:中);
  • Tampering 篡改:
    • 威胁描述:涉及恶意修改数据。示例包括对持久数据(例如数据库中保存的数据)进行未经授权的更改,以及数据在通过开放网络(例如 Internet)在两台计算机之间流动时的更改。
    • 威胁目标:数据库信息、传输数据
    • 可能使用方式:跨站脚本攻击、SQL 注入攻击、日志攻击等(威胁度:较高);
  • Repudiation 否认:
    • 威胁描述:与拒绝执行某项操作而其他方没有任何方式证明的用户相关联。例如,用户在缺乏追踪被禁止操作的能力的系统中执行非法操作。不可否认性是指系统对抗否认威胁的能力。例如,购买商品的用户可能必须在收到商品时签名。然后,供应商可以使用签名的收据作为用户确实收到包裹的证据。
    • 威胁目标:日志记录
    • 可能使用的方式:否认操作、缺少签名(威胁度:中);
  • Information Disclosure 信息泄露:
    • 威胁描述:涉及将信息暴露给不应该访问它的个人——例如,用户读取他们无权访问的文件的能力,或者入侵者读取两台计算机之间传输的数据的能力。
    • 威胁目标:数据信息
    • 可能使用的方式:恶意程序窃取信息,钓鱼网站(威胁度:高);
  • Dos 拒绝服务:
    • 威胁描述:拒绝服务 (DoS) 攻击拒绝向有效用户提供服务,例如,通过使 Web 服务器暂时不可用或无法使用。您必须防范某些类型的 DoS 威胁,以提高系统可用性和可靠性。
    • 威胁目标:服务器
    • 可能使用的方式:使用僵尸电脑进行DOS攻击、UDP FLOOD\SYN FLOOD、Land攻击等(威胁度:高);
  • Elevation of privilege 特权提升:
    • 威胁描述:非特权用户获得特权访问,从而有足够的访问权限来破坏或破坏整个系统。特权提升威胁包括攻击者有效渗透所有系统防御并成为可信系统本身的一部分的情况。
    • 威胁目标:访问权限
    • 可能使用的方式:挂马攻击、跨域攻击、跨站脚本攻击等(威胁度:较高)。

STRIDE应对方法

在初期进行STRIDE威胁建模

威胁建模

威胁建模是一个非常有用的工具,它的核心是像攻击者一样思考。威胁建模强迫我们站在攻击者角度去评估产品的安全性,分析产品中每个组件是否可能被篡改、仿冒,是否可能造成信息泄露、拒绝攻击。

威胁建模流程

  • 绘制数据流图
  • 识别威胁
  • 提出缓解措施
  • 安全验证

数据流图

识别威胁

元素 仿冒 篡改 抵赖 泄露 拒绝服务 权限提升
外部实体 1 1 0 0 0 0
处理过程 1 1 1 1 1 1
数据存储 0 1 0 1 1 0
数据流 0 1 0 1 0 0

提出缓解措施

威胁类型 缓解措施
仿冒 认证
篡改 完整性保护
抵赖 数字签名
信息泄露 保密性
权限提升 访问控制

安全验证

在威胁建模完成后,需要对整个过程进行回顾,不仅要确认缓解措施是否能够真正缓解潜在威胁,同时验证数据流图是否符合设计,代码是否符合预期等。

基于DREAD模型的风险分析

分析背景

威胁建模工具是 Microsoft 安全开发生命周期 (SDL) 的核心要素。潜在安全问题处于无需花费过多成本即可相对容易解决的阶段,软件架构师可以使用威胁建模工具提前识别这些问题。因此,它能大幅减少开发总成本。此外,我们设计该工具时考虑到了⾮安全专家的体验,为他们提供有关创建和分析威胁模型的清晰指导,让所有开发人员都可以更轻松地使用威胁建模。
通过使用Microsoft threat-modeling工具进行威胁建模后,我们需要对威胁进行评级,进行优先排序。

威胁评级DREAD

威胁评级

根据威胁造成的危险对其进行评价。这样就能够首先解决危险最大的威胁,然后再解决其他的威胁。实际上,解决所有找出的威胁也许在经济上是不可行的,可以进行决策,忽略掉一些,因为它们发生的机会很小,即使发生,带来的损失也很小。

简单评价系统: 危险 = 发生概率 × 潜在的损失  

这种评价方式很容易理解,发生概率大,潜在损失也大的威胁肯定危险等级最高;而发生概率低,潜在损失也低的威胁危险等级最低。发生概率大损失小或者发生概率小损失大的,危险等级就居中。 实际做STRIDE威胁分析时就是用的这种简单评价方式,评价简洁实施容易,但由于评价标准单一,对于有争议的威胁就可能出现大家对危险等级的评级意见不统一。

DREAD威胁评级模型

DREAD分别是威胁评级的5个指标的英文首字母。

  • 潜在损失(Damage Potential)如果缺陷被利用,损失有多大?
    0 = 没有损失
    5 = 个人用户数据被盗用或影响
    10 = 整体的系统或数据破坏

  • 重现性(Reproducibility)重复产生攻击的难度有多大?
    0 = 非常困难或者不可能,即时对于应用管理员
    5 = 需要一步或两步,可能需要变成授权用户
    10 = 仅仅一个浏览器和地址栏就完成攻击,不需要身份认证

  • 可利用性(Exploitability)发起攻击的难度有多大?
    0 = 高级程序和网络知识,以定制的或高级攻击工具
    5 = 互联网上存在恶意软件,此漏洞可被轻易地利用和可用的攻击工具
    10 = 仅仅一个web浏览器就可以

  • 受影响的用户(Affected users)用粗略的百分数表示,多少用户受到影响?
    0 = 没有
    5 = 一些用户,但不多
    10 = 所有用户

  • 可发现性(Discoverability)缺陷容易发现吗?
    0 = 非常困难,甚至不可能; 需要源码或者管理员权限
    5 = 可以通过猜测或者监测网络活动来发现
    9 = 错误的细节已经在公共平台上披露,可以用搜索引擎轻易发现
    10 = 信息在web浏览器的地址栏或者表单里可见。


这5个指标每个指标的评级分为高中低三等,最终威胁的危险评级由这5个指标的加权平均算出。

举例

比如前不久刚爆出的CPU芯片的Meltdown和Spectre漏洞,这个威胁因为是涉及硬件底层的漏洞,所以在其上面运行的任何软件或者系统都可能受到影响,而不像通常的某个软件的漏洞,只针对对应的软件。
所以这个漏洞在“潜在的损失”(Damage Potential)这项评分一定是高,但在“可发现性”(Discoverability)这项评分上就是低,因为这个底层的漏洞⾮常难发现,需要有非常丰富经验和技术的研究者花很多时间和精力才可能发现的,事实上这个漏洞的确也是存在了很多年一直没有被发现。类似如此对每项指标逐一评级后就能算出最终的危险评分。每项评级的评定标准参考上表。

DREAD应对方法

在初期进行DREAD威胁建模

威胁建模

威胁建模是一个非常有用的工具,它的核心是像攻击者一样思考。威胁建模强迫我们站在攻击者角度去评估产品的安全性,分析产品中每个组件是否可能被篡改、仿冒,是否可能造成信息泄露、拒绝攻击。

威胁建模流程

  • 分析五个指标
  • 计算风险等级
  • 风险校正和缓解措施
  • 安全验证

分析五个指标

  1. 潜在损失:
    0=没有损失
    5=个人用户数据被盗用或影响
    10=整体的系统或数据破坏

  2. 重现性
    0=非常困难或不可能,即使对于应用管理员
    5=需要一步或两步,可能需要变成授权用户
    10=仅仅一个浏览器和地址栏就完成攻击,不需要身份认证

  3. 可利用性
    0=需利用高级程序和网络知识
    5=需利用恶意软件,此漏洞可被轻易利用和可用的攻击工具
    10=仅仅一个web浏览器就可以

  4. 受影响用户
    0=没有
    5=一些用户,但是不多
    10=所有用户

  5. 可发现性
    0=非常困难,甚至不可能,需要源码或者管理员权限
    5=可以通过猜测或者监测网络活动发现
    9=错误细节在公共平台上披露,可用搜索引擎发现
    10=信息在web浏览器的地址栏或者表单里可见

计算风险等级

由以上五个指标加权平均算出危险评级:
严重:9-10
高危:6-8
中危:3-5
低危:1-2
忽略:0
DREAD模型的计算方式:等级=危害性+复现难度+利用难度+受影响用户+发现难度

已有的等级计分分数标准,结合DREAD的等级计算方式,最终适配出来的分数是:

等级[忽略(0),严重(10)]=(潜在损失[0,10]+重现性[0,10]+可利用性[0,10]+受影响用户[0,10]+可发现性[0,10])/2

其中,
1.潜在损失、重现性、可利用性任意一个值为0,总分即为0;
2.等级为0总分除以2后取整。

风险校正和缓解措施

  1. 根据DREAD模型计算的5个维度的权重都是1,而通常情况下更多人更看重漏洞危害对等级的影响,或者有的只看重危害和利用难度,或者有的只看重危害+利用难度+影响用户,那么权重是不是需要调整呢,或者删掉一些维度呢?
    这个需要大量的数据和实践来支撑,目前DREAD模型的标准权重是1,这个是模型的理论基础,后续结合实际情况再看是否和如何调整。

  2. 大部分时间计算下来的漏洞都是中危以上,基本上很难计算出来低危的漏洞,而实际上确实有低危的情况。
    1)方法一:引入部分漏洞类型,当选择这些类型的时候,会默认给出一些参考值。
    2)方法二:调整漏洞等级的大分和小分的值,例如现有低危计算是12,可以调整为0.53.5都是低危。

  3. 除了常见的5个维度,有些情况下,如果通盘考虑,除了传统意义上的安全风险,可能还有覆盖不全的?
    1)安全维度本身,有时候需要考虑触发条件等因素,可以酌情进行调整。
    2)公关风险和法律风险

安全验证

在威胁建模完成后,需要对整个过程进行回顾,不仅要确认缓解措施是否能够真正缓解潜在威胁,同时验证数据流图是否符合设计,代码是否符合预期等。

人员分工

  • 20201213郭幸坤:DREAD应对方法
  • 20201221曾思源:STRIDE应对方法、
  • 20201220蔡笃俊:安全性设计方案
  • 20201229赵斌:基于DREAD模型的风险分析
  • 20201214罗云帆:基于STRIDE模型的威胁分析
  • 20201212杨铖宇:系统资源分析

安全性设计报告

系统安全体系结构

物理环境的安全性

物理层的安全包括通信线路、物理设备和机房的安全,主要体现在通信线路的可靠性、软硬件设备的安全性、设备的备份、设备的防灾害能力、抗干扰能力等。

操作系统的安全性

系统层的安全问题来自计算机网络内使用的操作系统的安全,例如WINDOWS和UNIX等。

  • 操作系统本身,包括身份认证、访问控制和系统漏洞等。
  • 对操作系统安全配置问题
  • 病毒

网络的安全性

网络层的安全问题主要体现在计算机网络方面,包括网络层身份认证、网络资源的访问控制、数据传输的保密与完整性等。

应用的安全性

应用层的安全问题主要由提供服务所采用的的应用软件和数据的安全性产生,包括Web服务、DNS等。

管理的安全性

安全管理包括安全技术和设备的管理、安全管理制度等,合理规划人员角色配置,可以在很大程度上降低其他层次的安全漏洞。

数据加密技术

目的:确保数据的保密性,防止对手的被动攻击

对称加密算法——3DES

DES是一种迭代的分组密码,明文和密文都是64位,使用一个56位的密钥以及附加的8位奇偶校验位。攻击DES的主要技术是穷举法,原因是DES密钥较短,所以这里采用112位密钥的进行三次加密的3DES。

认证技术

目的:确保数据发送者和接收者的真实性和报文的完整性

数字签名RSA

数字签名是附加在数据单元上的一些数据,使接收者能够核实发送者对数据的签名。

消息摘要算法MD5

它会产生一个128位的消息摘要,便于接收者确定文件传输完整一致。

数字证书

数字证书是由认证中心签发的对用户的公钥的认证。数字证书的格式遵从X.509体系标准。

身份认证

用户登录系统时应进行以口令认证为方式的身份认证,从而识别用户的合法性,组织非法用户访问系统。

密钥管理体制

PKI

PKI全名为公钥基础设施,它承担着各类密钥和关键敏感数据的生成、分发、使用、存储、备份、更换、销毁等生命周期管理。

通信与网络安全技术

防火墙

防火墙可以为系统提供访问控制功能、内容控制功能、全面的日志功能,将内外网分离,使游客用户无法阅览关键信息。

安全协议

HTTPS

HTTPS是以安全为目标的HTTP通道,简单来说,HTTPS是HTTP的安全版本。SSL极难窃听,对中间人攻击提供一定的合理保护。

HTTPS使用端口443,用于安全的HTTP数据传输,应用了SSL作为HTTP应用层的子层,并支持使用X.509数字证书。

入侵检测和入侵防护

IDS是一种主动保护计算机免受攻击的网络安全技术。

IPS是一种主动的、积极的入侵防范和组织系统。

数据库安全

SHA-1哈希算法

管理员在设置用户密码时,经过SHA-1哈希算法加盐生成摘要后存入数据库。

实验二验收-1

任务详情
0.使用git从码云或github下载小组代码,提交过程截图
1.在你的电脑上编译小组项目,提交截图。
2.在你的电脑上运行小组项目,提交截图。

本机IP:192.168.43.199



posted @ 2023-06-04 20:40  20201229赵斌  阅读(122)  评论(0)    收藏  举报