- 博客(45)
- 收藏
- 关注
原创 [Kerberos] 简化的加密和校验和总则
当 E 的 block size 小于 random-to-key 要求的输入长度时, 需要重复调用 E(将前一次的结果作为下一次的输入), 直到输出长度达到 random-to-key 要求的输入长度。这是底层加密和解密算法所使用分组加密算法的块大小, 用于密钥派生以及消息 confounder 和初始向量的大小。这表示的在传输的消息中使用的 HMAC 函数输出的前导字符串的长度。对于传统的带有填充的 CBC 模式, 它的值是底层加密算法的块大小。和 后缀必要的填充以便消息长度是消息块大小的整数倍。
2025-04-01 23:18:47
766
原创 [Kerberos] 加密和校验和总则
由于这样做意味着了解特定的加密系统,因此生成非默认参数值应该是一种不常见的操作,并且正常的 Kerberos 应用程序应该能够将此参数块视为 KDC 提供的不透明对象或默认为某些特定于机制的常量值。这个函数接收一个 specific-key, cipher state 和一个不为空的密文, 验证消息完整性, 如果完整性检查正常, 则输出一个明文和一个新的 cipher state.函数必须接收任意长度的输入。不需要规定如何编码无效的 key, 并且所有的生成 key 的规则都应该避免生成无效的 key。
2025-03-26 11:30:06
806
原创 [Kerberos] Windows setspn 命令
基于 Microsoft Windows 的计算机使用服务主体名称 (SPN) 时不区分大小写。但是在其他 Kerberos 环境下(比如 linux), SPN 是大小写敏感的, 这里需要注意。对 Active Directory 服务账号的 SPN 进行基本的管理操作(读取, 删除,修改等)。如果你看到的服务器 SPN 显示的名称似乎不正确;同名的主机存在, 就当做主机名来用, 否则,当作用户名来用。是计算机名, 新的 SPN 将会被添加给它。例子1: 枚举当前注册的SPN的列表。
2025-01-09 21:55:48
881
原创 [TLS] 0-RTT Data
这是 TLS1.3 新加的一个特性.: 可以用于快速的发送一部分数据” 的含义:通常的 TLS 连接, 只有 TLS 握手成功之后, 才能开始发送应用层数据。但是当使用 0-RTT 特性发送消息时, 不需要等待握手结束,便可以提交发送一小部分数据。因为不需要等待 TLS 握手流程进行完毕,因此比较快。代价是牺牲部分 TLS 的安全性。
2024-11-26 16:54:51
674
原创 [TLS] TLS13 Session resumption
正如前面所说, Session resumption 可以加速握手流程,这里我们先看看具体是如何做到加速的?完整握手流程{Finished}Session resumption 的握手流程{Finished}我们可以看到,在 Session Resumption 的握手流程中,都不用再次发送了。这就很明显了,更少的数据交换,那就需要更少的时间啦。
2024-11-19 12:22:45
1010
原创 [TLS] 基于 SessionID 的 Session Resumption
在 TLS1.3 之前的 TLS 版本中, 可以通过 Session ID 字段来完成 Session Resumption.那么具体实现如何呢,我们一起来看看。
2024-11-15 09:56:15
574
原创 [QUIC] 打包和可靠性
一个 QUIC 包中可以包含一到多个 QUIC 帧.发送方可以通过在一个 QUIC 包中包含尽可能多的 QUIC 帧来最小化每个 QUIC 包的带宽和计算成本。疯转每个 QUIC 包都会产生额外的数据: 包括加密的 padding,hmac, 以及 UDP 包头和底层封装所产生的额外数据等。减少 QUIC 包的数量, 便可以减少额外数据的量。主要是来自加密解密的计算开销, 以及丢包重传等。同一个 QUIC 链接上的多个流共享这个 QUIC 链接,每个流的数据放在STREAM帧上, 每个流的STREAM。
2024-11-14 10:22:11
594
原创 [QUIC] Packet Number 的编解码
从这里开始,我们将简称为 PN.QUIC 中 PN 的范围是:0-2^64-1. 但是在网络上传输时, 我们仅仅使用1-4字节来编码 PN 的值。如何做到呢?秘诀是只编码 PN 的较低有效位(具体使用多少位, 下边我们来说)。这篇文章, 我们来说说 QUIC 时如何编码解码 PN 的。
2024-11-11 09:38:38
1212
原创 [QUIC] QUIC Frames
当发送方想要在一个流上面发送更多的数据,但是被流级别的流量控制所限制而不能发送时, 需要发送这个帧给接收方,用以通知对方及时更新流量控制窗口。当发送方想要发送更多的数据,但是被链接级别的流量控制所限制而不能发送时, 需要发送这个帧给接收方,用以通知对方及时更新流量控制窗口。当一个节点想要在当前链接上创建一个新的流,但是由于最大流数量的限制, 而不能创建时, 应该发送这个帧给对方, 通知对方自己被限制了。用于通知发送方,按照上层应用的要求,收到的数据已经被丢弃,并且要求对方停止在当前流上发送数据。
2024-11-06 10:57:43
965
原创 [QUIC] QUIC 包格式
我们前面说过, Version Negotiation 包是版本无关的, 这里把 Version 字段设置为 0, 只是为了表明它是一个 Version Negotiation 包。因为这里使用的 Key 相关的参数都是公开的, 攻击者也可以获取到相应的 Initial Key。: 接下来的 4 比特的含义与特定的包类型相关,后边详细描述. (Mask: 0x0f): 包中其余部分是一组 32 比特的版本号,表示服务器端支持的版本号。相比于短头包, 长头包包含了更多的信息,但是包占用的带宽也更多。
2024-11-06 10:56:26
824
原创 [QUIC] 流量控制
流量控制也是必须要有的。它可以防止发送方发送过快以至接收方缓存过多数据,或者恶意的发送方通过发送大量数据来消耗接收方的内存。QUIC 会限制在一个流上能发送的最多数据量和在一个链接上的所有流最多发送的总数据量。同时, 还会限制最多可以创建多少个流。
2024-10-28 14:32:38
463
原创 MQTT: Packet Identifier
对于 QoS 是 0 的 PUBLISH 包,不能携带 Packet Id。客户端在接受的一个带有 Packet Id 的包的 “ACK” 响应之后,可以重用当前 Packet Id。当客户端重新发送一个包的时候,必须保证这个包和之前发送时候使用的 Packet Id 相同。客户端每次发送一个新的包的时候,必须给这个包设置一个从未使用过的 Packet Id.使用 Packet Id 之后,可以并行的发送多个消息,然后等该他们对应的响应。服务器和客户端在选择 Packet Id 时,是相互独立的。
2024-09-02 22:02:50
639
原创 MQTT: PUBLISH
当客户端或者服务器第一次尝试发送一个 PUBLISH 消息的时候,DUP 应该未设置为 0。如果 DUP 为 1, 说明服务器或者客户端正在尝试重新传输一个之前已经发送过的 PUBLISH 消息。对于 QoS 0 的消息, DUP 应该总是为 0.对于服务器端来说,接收到的 PUBLISH 中的消息的 DUP 值不影响服务器在分发这个消息到订阅者时的 PUBLISH 消息中的 DUP 的值,它们之间没有必然联系。是否是 DUP,完全由当前将被发送的 PUBLISH 消息是否是一个重传的消息决定。
2024-09-02 22:02:00
711
原创 MQTT: Will Message
Will 消息需要被服务器保存在服务器端,和当前网络连接关联。Will 消息必须在后续网络连接断开之后被分发出去(Publish), 除非服务器收到了来自客户端的 Disconnect 包。当客户端主动的通过发送 DISCONNECT 断开了网络连接的情况下, Will 消息是不应该被服务器分发给订阅者的。如下情况下 Will 消息需要从 Session 中移除;在需要的时候,服务器端应该的分发 Will 消息。
2024-09-02 22:01:09
608
原创 MQTT: Topic Names and Topic Filters
Topic Name 和 Topic Filter 的区别就是 Topic Name 不能包含通配符,而 Topic Filter 可以包含通配符。Topic Name 标识一个具体的主题,而 Topic Filter 可以标识一个或者一组主题。
2024-09-02 22:00:14
952
原创 MQTT: Keep Alive
如果 Keep Alive 的值不为零,但是在1.5倍的约定时间间隔后,服务器没有收到来自客户端的控制包(包括 PINGREQ), 服务器端应该关闭与客户端的网络连接,并且把它当作一个网络错误。如果在此时间间隔内,没有其他的控制包需要发送给服务器端,客户端可以发送 PINGREQ 包。如果客户端发送了 PINGREQ 消息,但是在一定时间之后,没有收到来自服务器端的 PINGRESP 消息,客户端应该关闭当前网络连接。这个值规定了客户端从发送上一个控制包之后,到发送下一个控制包之间最大的时间间隔。
2024-09-02 21:59:08
818
原创 MQTT: Client Identifier
服务器端也可以支持 ClientId 是空字符串的情况。但是这种情况应该被特殊处理,服务器需要为这个 ClientId 生成一个唯一的不为空的 ClientId,然后像处理 ClientId 不为空的情况一下来处理当前 CONNECT 包。每个连接到服务器的 MQTT Client 必须设置一个唯一的 ClientId。服务器也可以支持长度大于 23 的 ClientId,也可以支持在 ClientId 中包含其他的字符。ClientId 是一个 1-23个字节的 UTF8 编码的字符串。
2024-09-02 21:58:11
999
原创 MQTT: Clean Session Flag
控制 Session 的状态. (Session State)Session State 用户确保在客户端和服务器之间的多个连接中可靠的传输消息。
2024-09-02 21:55:49
527
原创 X509 证书:一个 CRL 和 OCSP中均已经被吊销的过期证书示例
下载地址:https://www.digicert.com/kb/digicert-root-certificates.htm。
2024-08-28 15:18:19
672
原创 X509 证书:一个使用 High-tag-number form 编码的 Tag 示例证书
其中部分节点的 Tag 值超过了 30,使用的 High-tag-number form 编码, 比较少见。
2024-08-28 15:17:26
261
原创 ASN.1 签名结构
当使用 RSASSA-PSS 作为 Algorithmidentifier 时, parameter 字段的结构应该为 RSASSA-PSS-Params.对于 RSA 类型来说, SignatureValue 结构的内容就是 RSA 签名的内容, 编码为 BitString 即可。常见算法有: 1.2.840.10040.4.3 dsaWithSha1。它的结构和普通的 RSA 签名结构相同。省略掉 parameters 字段。省略掉 parameters 字段。
2024-05-11 12:22:55
664
原创 HTTP Digest Auth
相比于 Basic,Digest 不需要在网络上传输用户的密码。但是它依然不是一个身份验证的完美方案,它没有提供认证消息内容加密的机制。这个协议的目的是创建一个简单的认证方法,避免 Basic 的严重缺陷。
2024-04-22 09:07:06
1421
原创 HTTP Basic Auth
注意: 如果你在实际项目中使用 Basic 授权,请不要使用 http,使用 https.因为 Basic 认证需要在网络上明文传输用户名和密码,如果不使用 https 协议,你的密码将会泄露。Basic 认证直接校验客户端的用户名和密码。
2024-04-22 09:01:50
531
原创 TLS/DTLS 使用 Raw Public Key
通常情况下, TLS 握手过程中使用 PKIX certificate, 通过校验这些证书是否合法来确保 TLS 通信的安全。但是,在一些比较小的场景中,服务器客户端都使用自签名的证书,然后这些证书通过其他方式分发给需要通信的各个节点。在这种情况下,证书校验就退化为仅仅比较证书的二进制内容是否相等了,其他的校验都将不再需要。TLS 握手过程中交换的证书信息将会很小,减少握手过程所需要交换的数据量处理证书的代码将会很简单。通常的 TLS 实现中,处理证书将会是很大一个的功能模块。
2024-04-15 16:34:31
756
原创 [Windows Shell] 获取 Windows File Explorer 当前打开的目录
Windows Shell 方式获取 File Explorer 当前打开的目录
2024-02-08 22:19:12
229
Krb5dissect
2025-02-14
S3 Explorer: Windows 上 S3 管理工具
2024-05-22
windows internal 7th part 2
2024-04-28
Windows internal 7th part 1
2024-04-28
Windows Internal 6th Part 1
2024-04-28
Windows x64 OpenSSL release
2023-11-28
Windows dumpbin GUI 小工具
2023-11-23
FileInfo.exe 用于获取 Windows 文件的详细信息(包括 COM 信息以及不能通过文件浏览器查看的属性)
2023-11-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人