Professional Documents
Culture Documents
sở hữu khóa riêng (POP- Proof of Possession) được ứng dụng trong hạ tầng khóa công khai
sở hữu khóa riêng (POP- Proof of Possession) được ứng dụng trong hạ tầng khóa công khai
nghệ
1. MỞ ĐẦU
Chứng minh sở hữu khóa riêng (Proof-of-Possession of Private Key, viết tắt
là POP), là một phương tiện cung cấp một biện pháp cho một bên thứ hai thi
hành một giải thuật để thiết lập một mức đảm bảo an toàn rằng bên thứ nhất sở
hữu và có khả năng sử dụng khóa riêng. POP là một thao tác cần thiết được sử
dụng trong hạ tầng khóa công khai (PKI) để một thực thể cuối (EE) có thể chứng
minh với CA/RA rằng nó sở hữu khóa riêng tương ứng với khóa công khai yêu
cầu chứng thực. Nói một cách khác POP đảm bảo với CA/RA rằng thực thể cuối
mà yêu cầu chứng thực khóa công khai Y thực sự sở hữu khóa riêng X tương ứng.
Trong PKI, POP được triển khai (cài đặt) trong các yêu cầu (PKI request), cụ thể
là trong thông điệp yêu cầu chứng thực (Certificate Request Message), để thực
thể cuối chứng minh sở hữu khóa riêng với CA/RA. POP được thực hiện theo
nhiều cách phụ thuộc vào mục đích sử dụng của khóa.
POP cung cấp thêm mức đảm bảo an toàn cho hoạt động của PKI, nó cho
phép CA/RA kiểm tra được sự gắn kết giữa một thực thể và cặp khóa của nó (xác
thực được thông tin yêu cầu chứng thực) và nhằm ngăn chặn các tấn công (nguy
cơ) đối với các mục đích sử dụng của khóa.
2. MỘT SỐ QUY ƯỚC
EE: Thực thể cuối.
EEName : tên của EE.
CA: Thẩm quyền chứng thực.
RA: Thẩm quyền đăng ký.
EEpub, EEpri : lần lượt là khóa công khai và khóa riêng của EE.
Sign (Text) : Ký số lên Text bằng khóa riêng của EE.
E pub
VerEE (Z ) : Kiểm tra chữ ký bằng khóa công khai của EE.
pub
EncK(Text): mã mật giá trị Text sử dụng lược đồ mật mã đối xứng với khóa bí mật
K.
DecK(Z): giải mã giá trị Z sử dụng lược đồ mật mã đối xứng với khóa bí mật K.
EncRA (Text) : mã mật giá trị Text sử dụng lược đồ mật mã khóa công khai
pub
riêng RApri.
Tạp chí Nghiên cứu KH&CN quân sự, Số 34, 12- 2014 1
Nonce: giá trị ngẫu nhiên.
Comp(A, A’): so sánh giữa A và
A’.
Hash(m): băm thông điệp dữ liệu m.
Req(EEpub): gửi yêu cầu chứng thực tới CA/RA với tham số khóa công khai EEpub.
KDF(m): Dẫn xuất khóa từ tham số m.
KWK(X); KW K1(Y ) : Bọc khóa X bằng khóa K; giải bọc khóa Y bằng khóa K.
MACK(text): Tóm lược thông điệp dữ liệu m với khóa K.
3. GIAO THỨC CHỨNG MINH SỞ HỮU KHÓA RIÊNG
Giao thức chứng minh sở hữu khóa riêng – giao thức POP bao gồm các
thông điệp dữ liệu (PKI Message) cần thiết để một thực thể cuối có thể chứng
minh với CA/RA rằng nó sở hữu khóa riêng tương ứng với khóa công khai được
yêu cầu chứng thực. POP được ứng dụng trong giao thức quản lý chứng thư. Để
thực hiện POP người ta sử dụng nhiều cách khác nhau phụ thuộc vào mục đích
sử dụng của cặp khóa yêu cầu chứng thực. Có 3 trường hợp thực hiện POP tương
ứng với 3 mục đích sử dụng khóa: dùng để ký, để mã, để thỏa thuận khóa.
3.1. Với các khóa dùng để ký
Nếu không sử dụng POP, chủ sở hữu cặp khóa ký có nguy cơ bị mạo danh
chữ ký (mục 5.1 trong [5]). Khi A gửi yêu cầu chứng thực, B tấn công thay khóa
công khai của A bằng khóa công khai của mình trong yêu cầu chứng thực. Sau
khi được cấp chứng thư (tên là A, khóa công khai của B), B sử dụng khóa riêng
để ký và gửi cho C, C sử dụng chứng thư nêu trên (tên của A) kiểm tra thấy hợp
lệ và tin rằng A đã ký lên tài liệu này.
Với cặp khóa dùng để ký (mục 4.3.1 trong [1]), thực thể cuối có thể chứng
minh sở hữu khóa riêng bằng cách ký lên một giá trị. Các bước thực hiện như
sau:
1. Thực thể cuối ký lên giá trị bao gồm thông tin về tên và khóa công khai
của thực thể cuối. Thông tin về tên, khóa công khai và chữ ký được kèm theo
trong yêu cầu chứng thực.
2. CA/RA sẽ sử dụng khóa công khai trong yêu cầu chứng thực để kiểm tra
chữ ký. Nếu đúng thì khẳng định rằng thực thể yêu cầu chứng thực khóa công
khai sở hữu khóa riêng tương ứng.
Tóm tắt các bước:
EE CA/RA
1 Z SignEE (EEname || EEpub ) Z, EEpub
pr
i
2 VerE (Z )
pub
Z = KWK(EEpri)
2 EE pr KW K1(Z )
; i
VerEE (SignEE (nonce))
pub pri
mật giá trị ngẫu nhiên và định danh của mình bằng khóa công khai EEpub), rồi gửi
b
3. EE sử dụng khóa riêng của mình để giải mã giá trị c nhằm khôi phục ra r’
và RAname’, tính giá trị x’ = H(r’). So sánh x và x’ (kiểm tra toàn vẹn) nếu bằng nhau
thì gửi giá trị r’ tới RA.
4. RA so sánh giá trị r với r’. Nếu bằng nhau thì RA đã xác thực một chiều
được EE và EE đã chứng minh với RA rằng nó sở hữu khóa riêng.
Tóm tắt các bước:
EE RA
1 Sinh cặp khóa EEpub, EEpri EEpub
2 r=nonce; x = H(r);
x, c EncEE (r, RAname )
pu
3 r Dec
, c b
3 K ' DecEE pr
i
( y);
n’
m’ = DecK’(x);
n’ = H(m’);
4 Comp(n’, n = H(m)).
3.3. Với các khóa dùng để thỏa thuận khóa
Với khóa dùng để thiết lập khóa (mục 3.1 trong [6]) (trao đổi hay thỏa thuận
khóa, hay vận chuyển khóa), nếu không có POP, quá trình thiết lập khóa có thể
phải đối mặt với một số tấn công, điển hình là tấn công chia sẽ khóa không biết
(Unknown Key Share attack) trong quá trình thỏa thuận khóa.
POP với các khóa dùng để thỏa thuận khóa có thể dùng bốn cách (mục 4.3.2
trong [1]). Ba cách đầu cũng giống như đối với khóa dùng để mã (cặp khóa dùng
để thỏa thuận khóa được chứng minh sở hữu khóa riêng theo các cách giống như
cặp khóa dùng để mã).
Cách thứ tư: thực thể cuối chứng minh sở hữu khóa riêng dựa trên bài toán
logarit rời rạc trong nhóm GF(p) hoặc trong nhóm các điểm trên đường cong
elliptic. Có nhiều giao thức thỏa thuận khóa dựa trên kiểu Diffie-Hellman trên
nhóm GP(p) (hoặc tương tự trên nhóm các điểm đường cong elliptic). Phần sau
sẽ mô tả giao thức POP cho trường hợp nhóm cơ sở là GF(p), nó sử dụng một
hàm dẫn xuất khóa (KDF – Key Derivarion Function) và một hàm tóm lược
thông báo có khóa (MAC – Message Authentication Code).
1. Tham số chung
Thực thể cuối EE và CA/RA có chung các tham số g, p. Số p nguyên tố (sao
cho bài toán tính logarit rời rạc trên GF(p) là bài toán khó) và g là phần tử sinh
của GF(p).
2. EE thực hiện các bước sau:
2.1 Sinh khóa riêng của EE, y =EEpri. Tính khóa công khai EEpub= gy mod p;
2.2 Lấy khóa công khai của CA/RA (CA/RApub) trong chứng thư của CA/RA;
2.3 Tính giá trị bí mật chung: ZZ = (CA/RApub)y mod p;
2.4 Tính khóa K được dẫn xuất từ giá trị bí mật ZZ : K = KDF(LI ||ZZ||
TI); LI = EE Distinguished Name; TI = CA/RA Distinguished Name;
LI (Leading Information), TI (Trailing Information);
2.5 Tính giá trị m = MACK(text); text = certificationRequestInfo;
2.6 Gửi giá trị m trong request tới CA/RA; (trong request có thông tin về
các hàm KDF, MAC, LI, TI …);
3. CA/RA thực hiện các bước sau:
Ký hiệu x là khóa riêng của CA/RA, x= CA/RApri. Khi đó khóa công khai
CA/RApub = gx mod p.
3.1 Tính giá trị bí mật chung: ZZ’ = (EEpub)x mod p; EEpub có trong yêu cầu;
3.2 Tính khóa tạm K’ được dẫn xuất từ bí mật chung ZZ’; K’ = KDF(LI
||ZZ’||TI);
3.3 Tính giá trị m’ = MACK’(text);
3.4 So sánh m và m’: Nếu m = m’ thì kết luận rằng EE sở hữu khóa riêng
(trong hệ mật khóa công khai dựa trên độ khó của bài toán tính logarit rời rạc) (là
y) tương ứng với khóa công khai EEpub mà EE yêu cầu CA/RA chứng thực. Chỉ
CA/RA mà EE gửi yêu cầu tới có thể kiểm tra được sự phù hợp giữa khóa riêng và
khóa công khai của EE vì nó sở hữu khóa riêng x để tính ra giá trị bí mật chung.
Tóm tắt các bước như sau:
EE CA/RA
1 y=EEpri, EEpub = gy mod p;
ZZ = (CA/RApub)y mod p;
LI = EE Distinguished Name;
TI = CA/RA Distinguished Name;
K = KDF(LI ||ZZ||TI);
text = certificationRequestInfo;
m = MACK(text); m, EEpub
2 x= CA/RApri;
CA/RApub = gx mod p
ZZ’ = (EEpub)x mod p;
K’ = KDF(LI ||ZZ’||TI);
m’ = MACK’(text);
Comp(m’, m).
4. CẤU TRÚC DỮ LIỆU MÔ TẢ GIAO THỨC POP
Để có thể ứng dụng rộng rãi POP trong các phần mềm PKI, một số tổ chức đã
đưa ra các khuyến cáo, đặc tả, định chuẩn về POP trong giao thức trao đổi thông
điệp dữ liệu giữa các thành phần của PKI. Hiện nay đã có một số đặc tả, chuẩn
về POP cho PKI được công bố như:
- PKCS #10 [7] của RSA Laboratories.
- Đặc tả Wireless PKI [8], của Open Mobile Alliance.
- Đặc tả về CMP [1] của IETF.
Trong các đặc tả trên, phần mô tả POP trong CMP của IETF sử dụng cấu trúc
thông điệp dữ liệu mật mã ([9], [10]) có ứng dụng rộng rãi nhất và được sử dụng
trong nhiều phần mềm PKI hiện hành. Sau đây sẽ trình bày một số cấu trúc dữ
liệu mô tả POP trong đặc tả CMP của IETF.
4.1. Cấu trúc thông điệp dữ liệu PKI
Cấu trúc tổng thể thông điệp dữ liệu PKI (mục 5 trong [1]):
1. PKI Message
PKIMessage ::= SEQUENCE {
header PKIHeader, // tiêu đề chứa thông tin chung
body PKIBody, // chứa thông tin cụ thể của mỗi thông điệp
protection [0] PKIProtection OPTIONAL, // bảo vệ tính toàn vẹn
extraCerts [1] SEQUENCE SIZE (1..MAX) OF CMPCertificate
OPTIONAL
//các chứng thư đính kèm nếu có}
PKIMessages ::= SEQUENCE SIZE (1..MAX) OF PKIMessage
2. PKI Message Header
PKIHeader ::= SEQUENCE {
pvno INTEGER { cmp1999(1), cmp2000(2) },
sender GeneralName,
recipient GeneralName,
messageTime [0] GeneralizedTime OPTIONAL,
protectionAlg [1] AlgorithmIdentifier OPTIONAL,
……………………………………………
………………………………
generalInfo [8] SEQUENCE SIZE (1..MAX) OF InfoTypeAndValue
OPTIONAL}
PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
PKI Header chứa các thông tin nhằm xác định địa chỉ và nhận dạng giao
dịch. Các thông tin này được bảo vệ toàn vẹn.
3. PKI Message Body
PKIBody ::= CHOICE {
ir [0] CertReqMessages, --Initialization Req
ip [1] CertRepMessage, --Initialization Resp
cr [2] CertReqMessages, --Certification Req
cp [3] CertRepMessage, --Certification Resp
p10cr [4] CertificationRequest, --PKCS #10 Cert. Req.
popdecc [5] POPODecKeyChallContent --pop
Challenge popdecr [6] POPODecKeyRespContent, --pop
Response
……………………………………………………………………………
……………………………………………………
pollReq [25] PollReqContent, --Polling
request pollRep [26] PollRepContent --Polling
response
} PKI body chứa 1 trong 26 loại dữ liệu trên.
4. PKI Message Protection
Một số PKI message cần được bảo vệ toàn vẹn sử dụng giải thuật mật mã
bất đối xứng với cấu trúc có dạng sau:
PKIProtection ::= BIT STRING
Trường protectionAlg trong phần PKI header phải được thiết lập nhằm xác
định giải thuật được sử dụng để bảo vệ thông điệp dữ liệu.
Đầu vào của trường protection (PKIProtection) là ProtectedPart
ProtectedPart ::= SEQUENCE
{ header PKIHeader,
body PKIBody
} Tùy từng trường hợp trường PKIProtection có thể chứa MAC hoặc chữ ký số.