Assinatura Digital - Unicamp
Assinatura Digital - Unicamp
Assinatura Digital - Unicamp
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Introdução à Criptografia<br />
<strong>Assinatura</strong> <strong>Digital</strong><br />
Exemplos de algoritmos:<br />
• RSA-PSS<br />
• Schnorr<br />
• DSA (EC-DSA)<br />
• Shamir (CBI)<br />
• Signcryption<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
Parâmetros<br />
p, q primos<br />
O algoritmo de assinatura RSA-PSS<br />
Probabilistic Signature Scheme<br />
Codificação Aleatória da Mensagem<br />
N = p · q, ed ≡ 1 (mod φ(N))<br />
k = |N| = k 0 + k 1<br />
G : {0, 1} k 1<br />
→ {0, 1} k−k 1−1<br />
H : {0, 1} ∗ → {0, 1} k 1<br />
G 1 (x) = os k 0 bits mais significativos de G(x)<br />
G 2 (x) = os k − k 1 − k 0 − 1 bits menos significativos de G(x)<br />
chave Privada: d<br />
chave Pública: N, e, G, H, k 0 , k 1<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
O algoritmo de assinatura RSA-PSS<br />
Geração (M, d, N):<br />
r ←∈ U {0, 1} k 0<br />
w ← H(M||r)<br />
r ∗ ← G 1 (w) ⊕ r<br />
y ← 0||w||r ∗ ||G 2 (w)<br />
return (y d (mod N))<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
Verificação (M, a, e, N):<br />
O algoritmo de assinatura RSA-PSS<br />
y ← a e (mod N)<br />
y ← b||w||r ∗ ||γ<br />
r ← G 1 (w) ⊕ r ∗ ;<br />
se (H(M||r) = w e G 2 (w) = γ e b = 0) então devolva SIM<br />
senão devolva NÃO.<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
O algoritmo de assinatura de Schnorr<br />
The Schnorr Signature Scheme, 1990<br />
Parâmetros<br />
p, q primos tais que q|p−1, |p| = 1024, |q| = 160<br />
g ∈ Z ∗ p de ordem q<br />
H : {0, 1} ∗ → Z q (H = SHA−1)<br />
x ∈ Z q<br />
y = g −x mod p<br />
chave Privada: x<br />
chave Pública: p, q, g, y, H<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
O algoritmo de assinatura de Schnorr<br />
Geração(M, x):<br />
k ∈ U Z q<br />
r ← (g k (mod p)),<br />
e ← H(M||r)<br />
s ← (k + xe (mod q)),<br />
return (e, s)<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
O algoritmo de assinatura de Schnorr<br />
Verificação (M, (e, s), p, q, g, y, H):<br />
r′ ← g s y e (mod p),<br />
e′ ← H(M||r′),<br />
se (e′ = e) então devolva SIM senão devolva NÃO.<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
O algoritmo de assinatura DSA<br />
The <strong>Digital</strong> Signature Standard, 1991<br />
Parâmetros<br />
p, q primos tais que q|p−1, |p| = 1024, |q| = 160<br />
g ∈ Z ∗ p de ordem q<br />
H : {0, 1} ∗ → Z q (H = SHA−1)<br />
x ∈ Z q<br />
y = g x mod p<br />
chave Privada: x<br />
chave Pública: p, q, g, y, H<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
O algoritmo de assinatura DSA<br />
Geração(M, x):<br />
k ∈ U Z q<br />
r ← (g k (mod p))(mod q),<br />
s ← k −1 (H(M) + xr)(mod q)<br />
return (r, s)<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
O algoritmo de assinatura DSA<br />
Verificação (M, (r, s), p, q, g, y, H):<br />
w ← s −1 (mod q),<br />
u 1 ← H(M)w (mod q),<br />
u 2 ← rw (mod q),<br />
se (r = (g u 1<br />
y u 2<br />
(mod p)) (mod q)) então devolva SIM<br />
senão devolva NÃO.<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
Criptografia Baseada em Identidades<br />
chave-privada = F (chave-mestre, identidade)<br />
chave-pública = alice@ic.unicamp.br (identidade)<br />
• Conceito proposto por Shamir, 1985 (assinatura digital)<br />
• Cocks, 2001, símbolo de Jacobi.<br />
• Sakai, Ohgishi e Kasahara, 2000, emparelhamentos bilineares.<br />
• D. Boneh e M. Franklin, 2001, emparelhamentos bilineares, Voltage<br />
Security.<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
Criptografia Baseada em Identidades (CBI)<br />
O sistema de assinatura de Shamir, baseado em identidades, utiliza os<br />
seguintes quatro algoritmos:<br />
• Configuração: algoritmo operado pela autoridade de confiança<br />
(AC) para gerar os parâmetros globais do sistema e a<br />
chave-mestre.<br />
• Gerar-chave-usuário:<br />
Entrada: a chave-mestre e uma cadeia arbitrária de bits ID.<br />
Saída: uma chave privada correspondente a ID.<br />
• <strong>Assinatura</strong>: algoritmo de assinatura digital;<br />
Entrada: uma mensagem e a chave privada do assinante<br />
Saída: a assinatura da mensagem.<br />
• Verificar: algoritmo para verificar uma assinatura<br />
Entrada: o par mensagem e assinatura<br />
Saída: Verdadeira ou Falsa<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
Parâmetros<br />
Configuração:<br />
AC<br />
- p, q primos<br />
- N = p · q<br />
- e: um enteiro tal que mdc(e, φ(N)) = 1<br />
- d: um inteiro tal que ed ≡ 1 (mod φ(N))<br />
- h : {0, 1} ∗ → Z φ(N)<br />
- chave privada de AC: ⁀chave-mestre = d<br />
- Parâmetros públicos: N, e, h<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
Gerar-chave-usuário:<br />
Alice (ID):<br />
Parâmetros<br />
ID →→→→ AC<br />
AC :<br />
g ←ID d (mod N) →→→→ Alice<br />
g: chave privada de Alice<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
Geração da <strong>Assinatura</strong><br />
<strong>Assinatura</strong>:<br />
<strong>Assinatura</strong>(M, g):<br />
r ∈ U Z ∗ N<br />
t ← r e (mod N),<br />
s ← g · r h(t||M) (mod N).<br />
A assinatura é o par (s, t)<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
Verificação da assinatura<br />
Verificar:<br />
Verificar((ID, M, (s, t), N, e, h)):<br />
se (s e ≡ ID · t h(t||M) (mod N))<br />
então devolva Verdadeiro senão devolva Falsa.<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
Signcryption: assinatura + cifra<br />
• Criptossistema que combina as operações de assinatura e cifragem<br />
em uma única operação criptográfica.<br />
• Proposto por Yuliang Zheng, 1997.<br />
(Baseado na assinatura SDSS1).<br />
• O esquema de signcryption TBOS (Two Birds One Stone), proposto<br />
por Malone-Lee and Wembo Mao, em 2003, é baseado no sistema<br />
RSA.<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
O algoritmo de assinatura SDSS1<br />
Parâmetros<br />
- p, q primos tais que q|p−1, |p| = 1024, |q| = 160<br />
- g ∈ Z ∗ p de ordem q<br />
- H : {0, 1} ∗ → Z q (H = SHA−1)<br />
- x A ∈ Z q<br />
- y A = g x A<br />
mod p<br />
- chave Privada: x A<br />
- chave Pública: p, q, g, y A , H<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
Gerar assinatura<br />
Para assinar um documento M, Alice faz o seguinte:<br />
1. u ∈ U Z q<br />
2. Calcula k ← g u mod p<br />
3. e ← H(k||M)<br />
4. s ← u · (e + x A ) −1 (mod q)<br />
Alice envia (M, e, s)<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
Bob recebe de Alice (M, e, s):<br />
Verificação<br />
1. Bob recupera k de (e, s, g, p, y A ):<br />
k ← (g e y A ) s (mod p)<br />
2. Se e = H(k||M) então Bob aceita M como uma<br />
mensagem válida de Alice.<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
O algoritmo de signcryption de Zheng<br />
Parâmetros<br />
- p, q primos tais que q|p−1, |p| = 1024, |q| = 160<br />
- g ∈ Z ∗ p de ordem q<br />
- H : {0, 1} ∗ → Z q (H = SHA−1)<br />
- E um cifrador de blocos (E = AES)<br />
- x A ∈ Z q<br />
- y A = g x A<br />
mod p<br />
- chave Privada: x A<br />
- chave Pública: p, q, g, y A , H, E<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
A operação de signcryption<br />
Alice faz o seguinte:<br />
Objetivo: enviar uma mensagem assinada e cifrada a Bob<br />
1. u ∈ U Z q<br />
2. Calcula K ← yB u mod p e divide K em K = K 1||K 2<br />
3. e ← H(K 2 , M)<br />
4. s ← u · (e + x A ) −1 (mod q)<br />
5. c ← E K1 (M)<br />
Alice envia (c, e, s)<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
Bob recebe de Alice (c, e, s):<br />
A operação de unsigncryption<br />
1. Bob recupera K de (e, s, g, p, y A , x B ):<br />
K ← (g e y A ) sx B<br />
(mod p)<br />
2. Divide K em K 1 e K 2<br />
3. M ← D K1 (c)<br />
4. Se e = H(K 2 , M) então Bob aceita M como uma<br />
mensagem válida de Alice.<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
A operação de signcryption + não-repudio<br />
Alice faz o seguinte:<br />
Objetivo: enviar uma mensagem assinada e cifrada a Bob<br />
1. u ∈ U Z q<br />
2. Calcula k ← g u mod p<br />
3. Calcula K ← yB u mod p e divide K em K = K 1||K 2<br />
4. c ← E K1 (M)<br />
5. e ← H(k||M||y A ||y B )<br />
6. s ← u · (e + x A ) −1 (mod q)<br />
Alice envia (c, e, s)<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
Verificação<br />
Bob recebe de Alice (c, e, s):<br />
1. Bob recupera k e K de (e, s, g, p, y A , x B ):<br />
k ← (g e y A ) s (mod p)<br />
K ← (k) x B<br />
(mod p)<br />
2. Divide K em K 1 e K 2<br />
3. M ← D K1 (c)<br />
4. Se e = H(k||M||y A ||y B ) então Bob aceita M como uma<br />
mensagem válida de Alice.<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
Signcryption + não-repudio<br />
Uma terceira entidade pode verificar que (m||y A ||y B , e, s) é uma<br />
assinatura (SDSS1) válida utilizando a chave pública de A:<br />
1. k ← (g e y A ) s (mod p)<br />
2. Se e = H(k||M||y A ||y B ) ??<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
A operação de signcryption<br />
utilizando RSA<br />
Two Birds one Stone: Malone-Lee, Mao, 2003<br />
[Padding(M, r) d A<br />
(mod N A )] e B<br />
(mod N B )<br />
|N A | = |N B | = k<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
A operação de signcryption<br />
utilizando RSA<br />
|N A | = |N B | = k<br />
σ := Padding(M, r) d A<br />
(mod N A )<br />
σ < N A < 2 k<br />
σ ′ := σ − 2 k−1<br />
σ ′ < 2 k−1 < N B<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
A operação de signcryption<br />
utilizando RSA<br />
Chaves públicas: (N A , e A ), (N B , e B )<br />
chaves privadas: (NA, d A ), (N B , d B )<br />
k = |N A | = |N B | = n + k 0 + k 1<br />
Funções hash:<br />
H : {0, 1} n+k 0<br />
→ {0, 1} k 1<br />
G : {0, 1} k 1<br />
→ {0, 1} n+k 0<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
1. r ←∈ U {0, 1} k 0<br />
2. w ← H(M||r)<br />
3. s ← G(w) ⊕ (M||r)<br />
A operação de signcryption<br />
utilizando RSA<br />
4. Se s||w > N A volte ao passo 1<br />
5. c ′ ← (s||w) d A<br />
(mod N A )<br />
6. Se c ′ > N B , c ′ ← c ′ − 2 k−1<br />
7. c ← c ′e B<br />
(mod N B )<br />
8. Enviar c a Bob<br />
IC-UNICAMP 2008
Introdução à Criptografia<br />
A operação de unsigncryption<br />
1. c ′ ← c d B<br />
(mod N B )<br />
2. Se c ′ > N A , rejeite<br />
3. µ ← c e A<br />
(mod N A )<br />
4. Escreva µ como s||w<br />
5. M||r ← G(w) ⊕ s<br />
6. Se H(M||r) = w devolva M<br />
7. c ′ ← c ′ + 2 k−1<br />
8. Se c ′ > N A , rejeite<br />
9. µ ← c e A<br />
(mod N A )<br />
10. Escreva µ como s||w<br />
11. M||r ← G(w) ⊕ s<br />
12. Se w ≠ H(M||r), rejeite<br />
13. Devolva M<br />
IC-UNICAMP 2008