走进SAML——基础篇

article/2025/9/14 4:13:53

SAML的全称是Security Assertion Markup Language。提到SAML,我们主要想到的是其在各种单点登录场景中大行其道。单点登录我们通常叫做SSO,那么SAML到底是如何实现SSO的呢?在这个系列的文章中,我将为大家阐释清楚。不过,水是有源的,树是有根的。一切的一切,还得从非对称密码学谈起!

密码学新方向

1976年,两个斯坦福大学的杰出学者,在经过了三年的合作之后,发表了一篇题为《密码学的新方向》的文章。这篇论文首次引入了公共密钥加密协议与数字签名的概念。谁也想不到,短短几十年后,这篇文章构成了现代互联网加密协议的基石。就是这两位帅爷爷和萌蜀黍!!!

图1 《密码学的新方向》作者(图片来源于网络)

和对称密码基于单个共享密钥的方式不同,非对称密码始终是成对出现:公钥和私钥。由其中任何一个密钥加密的数据只能由另外一个密钥解密。即,由私钥加密的数据只能由公钥解密,由公钥加密的数据只能由私钥解密。非对称密码的这个特点使其在密钥交换和数字签名领域被广泛应用。

密钥交换的灵感

在需要加密的网络通信场景中,最常见的加密方式是基于共享密钥的对称加密方式。通信过程如下:

消息发送方和接收方事先约定好一把对称密钥K。然后,消息发送方使用密钥K对要发送的消息进行加密,并将加密后的结果通过网络发送给消息接收方。消息接收方利用密钥K对接受到的内容进行解密,并获得原始消息。

图2 利用共享密钥加密进行数据传输

由于共享密钥K只被消息发送方和接收方持有。因此,即便数据在传输过程中被劫持,攻击者由于没有密钥K,也无法获得原始消息内容。

但是问题来了,如何事先约定好密钥?如果消息发送方和接收方物理位置很近,还可以通过线下见面的方式约定密钥。但如果通信双方距离十万八千里呢?显然,线下约定的方式是不现实的。那么是否可以找到一种安全的方式,让通信双方基于网络就可以约定共享密钥呢?

图3 真相永远只有一个

真相永远只有一个:利用非对称密码学的机制进行密钥交换。消息接收方提前生成一对公私钥,并将公钥PubK广播出去,私钥PriK自己保存。有了这个前提条件,就可以安全的约定对称密钥了。过程如下:

消息发送方获取被广播的消息接收方的PubK,并使用该PubK对要传输的对称密钥K进行加密,并将加密之后的内容通过网络传输给接收方。消息接收方在收到加密内容之后,使用对应的PriK进行解密得到对称密钥K。

图4 利用非对称密码学的机制进行密钥交换

由于PriK只被接收方持有。因此,即便数据在传输过程中被劫持,攻击者由于没有私钥PriK,也无法获得原始消息内容。以这种方式,就解决了对称密钥传输的问题!

数字签名防伪造

在密钥交换的过程中,有一个步骤值得商榷:消息发送方获取被广播的消息接收方的PubK。这里面涉及一个认证的问题,怎么证明一个PubK就是接收方的PubK呢?如果出现黑客伪造接收方的PubK怎么办?就像下图酱紫。

图5 黑客伪造接收方的公钥

真相永远只有一个:数字签名。所谓数字签名,就是一个有公信力的权威机构用它自己的私钥对某些数据进行签名(通常称私钥加密为签名),以证明这些数据是可被信任的。

权威机构用自己的私钥将接收方的公钥PubK进行签名,消息发送方在收到签名后,利用权威机构对应的公钥解密以验证签名。如果验证通过,说明当前接收的PubK是经过认证的,是可以被信任。反之,攻击方的公钥是没有被认证的,是不可信任的。

图6 权威机构使用其私钥对信息签名

通过权威机构私钥加签的方式,保证了PubK来源的可靠性。那么谁是权威机构?恭喜你,你已经掌握了问题的精髓.在密码学领域,总是存在一个根信任的问题。就是最源头的信任,比如我们浏览器中使用的根证书就是一个典型的例子。

数字证书用处多

行文至此,数字证书的概念已经呼之欲出了!数字证书,又称为公钥证书,用来证明某个公钥被某个实体(通常为人、组织或服务)所持有。这就好比,你的房产证用来证明房子是被你持有。同理,你的公钥证书用来证明这把公钥被你持有。

一个数字证书包括的基本信息有:证书的版本号、证书序列号、使用的签名算法、颁发者的身份标识、证书的有效期、公钥、公钥持有者的身份。这些信息作为被签名的数据,使用指定的签名算法和CA的私钥进行签名,并将签名的结果添加到证书中。这就构成了一个完整的证书。数字证书的典型结构:

图7 数字证书的典型结构

由于CA机构的公钥是广而告之的,任何组织或实体只要用CA的公钥验证了证书中签名的合法性,就能证明当前证书是可靠的。即,证书中所声明的公钥与持有者关联。同时,该公钥对应的私钥被持有者唯一持有。

作为SAML系列文章的开篇,本文从密码学新方向的历史入手,引入了非对称密码学的概念。接着,以几个典型的例子介绍了非对称密码在密钥交换数字签名数字证书等三个方向的应用。掌握了这些必要的基础知识,下一篇文章,我们就来聊一聊SAML协议是如何把这些应用场景进行完美融合,进而设计出被广泛应用的单点登录解决方案的。

更多详细内容,欢迎来看我的博客。



一文搞懂SAML协议 - 知乎


http://chatgpt.dhexx.cn/article/EapnhP6c.shtml

相关文章

深入浅出SAML协议

SAML概述 SAML(Security Assertion Markup Language 安全断言标记语言)是一个基于XML的开源标准数据格式,为在安全域间交换身份认证和授权数据,尤其是在IDP(Identity Provider身份提供方)和SP(…

SAML2.0 笔记(一)

文章目录 一、前言二、初识概念1、SP & IDP 的概念2、认识元数据2.1 IDP MetaData2.1.1 SingleLogoutService2.1.2 SingleSignOnService 2.2 SP MetaData2.2.1 SingleLogoutService2.2.2 AssertionConsumerService 2.3 通用节点2.3.1 EntityId2.3.2 KeyDescriptor2.3.3 Nam…

【学习笔记】白盒及黑盒测试方法简介

目录 测试用例什么是测试用例测试用例的要素 白盒测试白盒测试的基本介绍白盒测试用例设计方法一、 逻辑覆盖法1.语句覆盖2. 判定覆盖3.条件覆盖4.判定-条件覆盖5.条件组合覆盖6.路径覆盖 二、基本路径测试法总结 黑盒测试分类功能测试性能测试 测试设计方法1.等价类法2.边界值…

白盒测试方法的简单理解(通俗易懂)

白盒测试主要使用逻辑覆盖测试方法,包括语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖等。 假设逻辑判断流程图如下图所示,我们简单来说说每种白盒测试方法是如何来进行的。 一、语句覆盖 语句覆盖的定义是:程序中…

详解软件测试中白盒测试基本概念及四种白盒测试方法以及六种逻辑覆盖法(语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖)

在这篇文章中,我们将讲解白盒测试的基本概念,以及四大常用的白盒测试方法。 一、白盒测试基本概念 1、白盒测试的定义 白盒测试又称为结构测试或逻辑驱动测试,它是把测试对象看成一个透明的盒子,它允许测试人员利用程序内部的逻…

【软件测试】软件测试方法之黑盒测试方法和白盒测试

白盒测试方法 一、概念 白盒测试也称结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。它可以形象得用下图表示: 二、白盒测试方法应该遵循的原则 保证一个模…

白盒测试及用例详解

目录 第一部分:概念理解 第二部分:上例题 第三部分:例题解答 附:纸质版解答过程 参考链接 第一部分:概念理解 在白盒测试中,逻辑覆盖测试是使用较多的方法。按照其对测试的有效程度,又将其…

白盒测试内容

白盒测试方法根据模块内部结构,基于程序内部逻辑结构,针对程序语句、路径、变量状态等来进行测试。 单元测试主要采用白盒测试方法,辅以黑盒测试方法。白盒测试方法应用于代码评审、单元程序之中,而黑盒测试方法则应用于模块、组件…

白盒测试

一、逻辑覆盖 逻辑覆盖法是最常用的白盒测试方法,它包括以下5种方法: ● 语句覆盖 ● 判定覆盖 ● 条件覆盖 ● 判定-条件覆盖 ● 条件组合覆盖 1.语句覆盖 语句覆盖(Statement Coverage)又称行覆盖、段覆盖、基本块覆盖,它是最常见的覆盖方式…

软件测试——白盒测试

目录 1.什么是白盒测试 1.1 白盒测试优缺点 2.白盒测试方法 2.1 静态 2.2 动态 2.2.1 语句覆盖 2.2.2 判断覆盖 2.2.3 条件覆盖 2.2.4 判定条件覆盖 2.2.5 条件组合覆盖 2.2.6 路径覆盖 2.2.7 基本路径测试法(最常使用) 1.什么是白盒测试 白盒测试也称结构测试&…

白盒测试中的几种覆盖方法

​ ​白盒测试用例设计的一个很重要的评估标准就是对代码的覆盖度。一说到覆盖,大家都感觉非常熟悉,但是常见的覆盖都有哪些?各自有什么优缺点?在白盒测试的用例设计中我们应该如何自如地运用呢?今天小编就为大家总…

「软件测试4」一文详解四大典型的白盒测试方法

软件测试——详解白盒测试基本概念,四种白盒测试方法 这是我参与更文挑战的第3天,活动详情查看:更文挑战 在上一篇文章中,我们讲到了黑盒测试。黑盒测试相较于白盒测试来说比较简单,不需要了解程序内部的代码&#x…

白盒测试方法 + 实战

定义 白盒测试又称结构测试,透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,白盒指的是程序的内部结构和运作机制是可见的。    目的   通过检查软件内部的逻辑结构,对软件中的逻辑路径进行覆盖测试;在程序…

白盒测试的方法笔记

白盒测试的方法笔记 一、概述:二、方法2.1 语句覆盖:2.2 判定覆盖2.3 条件覆盖2.4 判定条件覆盖2.5 条件组合覆盖2.6 路径覆盖2.7、逻辑覆盖总结 一、概述: 白盒测试也称结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作…

白盒测试的概念、目的是什么?及主要方法有哪些?

目录 1 白盒测试的概念 2 白盒测试的主要目的 3 测试覆盖标准 4 白盒测试的主要方法 4.1 逻辑驱动测试 4.1.1 语句覆盖 4.1.2 判定覆盖(分支覆盖) 4.1.3 条件覆盖 4.1.4 判定/条件覆盖 4.1.5 条件组合覆盖 4.1.6 黑盒法补充测试用例 4.2 路径…

白盒测试方法

一、概述: 白盒测试也称结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。 白盒测试法检查程序内部逻辑结构,对所有逻辑路径进行测试,是…

软件测试笔记(四):白盒测试

1 白盒测试 白盒测试是对软件的过程性细节做细致的检查,把测试对象看作是一个打开的盒子,允许测试人员利用程序内部的逻辑结构以及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态&#xff0…

白盒测试方法|白盒测试的六种方法比较分析

白盒测试的六种方法比较分析 一、摘要 白盒测试是测试人员常用的一种测试方法,越来越受到测试工程师的重视。白盒测试并不是简单的按照代码测试用例而走,需要根据不同的测试需求,结合不同的测试对象,使用适合的方法进行测试。本文…

白盒测试的各种方法

文章目录 一、逻辑测试法设计测试用例1.1语句覆盖1.2判定覆盖1.3条件覆盖1.4判断、条件覆盖&#xff08;CDC&#xff09;1.5条件组合覆盖&#xff08;MCC&#xff09; 二、基本路径测试法2.1定义&#xff1a;2.2程序控制流图 白盒测试又叫架构测试 语句覆盖<条件覆盖<判定…

白盒测试怎么做?

目录 前言 一、什么是白盒测试 二、白盒测试的分类 三、白盒测试的设计方法 四、白盒测试静态方法 五、白盒测试动态方法 六、白盒测试的特点 七、总结 前言 在企业内部&#xff0c;软件测试工程师基本处于“双高”地位&#xff0c;即地位高、待遇高。可以说他们的职业…