SAML在云上的应用——基础篇

简介: 作为SAML系列文章的开篇,本文从密码学新方向的历史入手,引入了非对称密码学的概念。接着,以几个典型的例子介绍了非对称密码在```密钥交换```、```数字签名```、```数字证书```等三个方向的应用。

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

密码学新方向

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

图1

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

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

密钥交换的灵感

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

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

图2

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

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

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

图3

图3 真相永远只有一个

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

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

图4


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

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

数字签名防伪造

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

图5


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

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

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

图6


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

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

数字证书用处多

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

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

图7

图7 数字证书的典型结构

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

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

目录
相关文章
|
4月前
|
监控 安全 UED
通过OAuth实现企业监控管理软件的安全认证流程
企业监控管理软件在当前信息时代中扮演着至关重要的角色,但随之而来的安全隐患也日益突出。为了保护用户数据和确保系统的安全性,采用OAuth(开放授权)协议是一种理想的选择。OAuth提供了一种安全而灵活的身份验证方式,适用于各种网络应用和服务。本文将深入探讨如何通过OAuth实现企业监控管理软件的安全认证流程,并通过代码示例演示关键步骤。
250 1
|
11月前
|
安全 NoSQL 前端开发
Shiro高级及SaaS-HRM的认证授权
Shiro高级及SaaS-HRM的认证授权
65 2
|
11月前
|
NoSQL Redis
Shiro高级及SaaS-HRM的认证授权-2
Shiro高级及SaaS-HRM的认证授权-2
61 0
|
12月前
《阿里云产品手册2022-2023 版》——应用身份服务 IDaaS
《阿里云产品手册2022-2023 版》——应用身份服务 IDaaS
120 0
|
21天前
|
弹性计算 Cloud Native 数据库
OpenLDAP+IDAAS+云SSO集成场景
上周拜访两家客户,有一家是IDAAS的重度用户,在使用Flink产品时发现不支持RAM Role,只能使用RAM User来管理用户,客户问在这种场景下IDaaS如何支持;另外一家用户使用了OpenLDAP来做企业的IDP,现在想使用云SSO来做多账号统一用户身份管理。本篇文章介绍一下这三个产品集成...
OpenLDAP+IDAAS+云SSO集成场景
|
XML JSON 安全
开源认证和访问控制的利器keycloak使用简介
开源认证和访问控制的利器keycloak使用简介
开源认证和访问控制的利器keycloak使用简介
|
安全 数据安全/隐私保护
IDaaS 安全认证介绍
IDaaS 安全认证介绍
255 0
IDaaS 安全认证介绍
|
负载均衡 Kubernetes 容器
统一认证中心 Oauth2 认证坑
统一认证Oauth2的认证完美填坑
|
云安全 边缘计算 弹性计算
|
弹性计算 运维 安全
基于OAuth2的跨网站统一登录解决方案
随着业务发展,一个企业开发、运营了多个网站,同时也产生了一些亟待解决的问题。本文旨在提供一套基于OAuth2的跨网站统一登录解决方案,从而提升用户注册与登录过程的体验,降低企业研发成本,为统一用户运营构建基础设施。
6114 0
基于OAuth2的跨网站统一登录解决方案