1.OAEP的编码
1.1名称介绍
-
D
B
(
D
a
t
a
B
l
o
c
k
)
=
l
H
a
s
h
∣
∣
P
S
∣
∣
01
∣
∣
M
DB(Data Block)= lHash || PS || 01 || M
DB(DataBlock)=lHash∣∣PS∣∣01∣∣M
-
l
H
a
s
h
lHash
lHash:标签
L
L
L的哈希值
- h L e n hLen hLen: l H a s h lHash lHash的字节长度
-
P
S
:
P
a
d
d
i
n
g
S
t
r
i
n
g
PS:Padding String
PS:PaddingString
- P S PS PS为 k − m L e n − 2 h L e n − 2 k-mLen-2hLen - 2 k−mLen−2hLen−2长的0x00。PS长度可能为0
- k k k是 RSA 中模数 n n n的字节长度
- 01:0x01
-
M
:
M
e
s
s
a
g
e
M:Message
M:Message
- m L e n mLen mLen:明文的字节长度
-
l
H
a
s
h
lHash
lHash:标签
L
L
L的哈希值
- m a s k e d D B = M G F ( s e e d ) ⊕ D B maskedDB = MGF(seed)\oplus DB maskedDB=MGF(seed)⊕DB
- m a s k e d S e e d = m a s k e d D B ⊕ s e e d maskedSeed = maskedDB \oplus seed maskedSeed=maskedDB⊕seed
- E M = 00 ∣ ∣ m a s k e d S e e d ∣ ∣ D B EM=00 || maskedSeed || DB EM=00∣∣maskedSeed∣∣DB
- 00串和01串的长度均为 1 1 1字节
1.2 编码过程
文中所提到的长度均为字节长度,即有多少个字节。
- 首先对输入的标签 L L L做 H a s h Hash Hash生成 l H a s h lHash lHash
- 然后生成 D a t a B l o c k DataBlock DataBlock,根据 k k k和 h L e n hLen hLen决定 P a d d i n g S t r i n g PaddingString PaddingString的长度
3. 如下图,生成
M
a
s
k
e
d
D
a
t
a
B
l
o
c
k
MaskedDataBlock
MaskedDataBlock
4. 然后生成
M
a
s
k
e
d
S
e
e
d
MaskedSeed
MaskedSeed
5. 输出
E
n
c
o
d
e
d
M
e
s
s
a
g
e
EncodedMessage
EncodedMessage