Segredo Partilhado Documento: MBNet

Transcrição

Segredo Partilhado Documento: MBNet
MBNet
Segredo Partilhado
Documento: MBNet - Segredo Partilhado_PT 0022.doc
Versão: 00.22
Data: 2006-05-20
Classificação: Confidencial
© June 2006, SIBS, SA
A informação contida neste documento é propriedade da SIBS, SA e não pode ser duplicada, publicada ou
divulgada a terceiros, na totalidade ou em parte, sem o prévio consentimento por escrito da Sociedade
Interbancária de Serviços, SA, o qual nunca deverá ser presumido.
O seu conteúdo está tão correcto quanto possível e pode ser alterado pela SIBS em qualquer momento e
sem ser dado conhecimento prévio.
SIBS, SA - Sociedade Interbancária de Serviços
Rua Soeiro Pereira Gomes, Lote 1, 1649-031 LISBOA, PORTUGAL
Telefone: +351-217 813 000 / Fax: +351- 217 935 665
Documento Confidencial
Versão 00.22, 2006-05-20
Ficha Técnica
Título do Documento:
Assunto:
Unidade de Estrutura:
Empresa:
Classificação do Documento:
MBNet
Segredo Partilhado
DSQSQ
SIBS
Confidencial
Lista de Distribuição:
Palavras-chave:
MBNet, Segredo Partilhado, Segurança, HASH
Nome do Ficheiro:
MBNet - Segredo Partilhado_PT 0022.doc
ID do Documento:
DSQSQ-2006-001
Páginas:
13
Revisões
DATA
VERSÃO
2006-05-20
00.22
MBNet
Segredo Partilhado
DESCRIÇÃO
Criação do documento em português
Página 2
Documento Confidencial
Versão 00.22, 2006-05-20
Índice
1
Introdução ........................................................................................................... 5
1.1
1.2
1.3
2
Segredo Partilhado............................................................................................... 6
2.1
3
Objectivos ..................................................................................................... 5
Estrutura do documento................................................................................... 5
Referências .................................................................................................... 5
Geração e Validação do C013............................................................................ 6
2.1.1
A chave como parâmetro de entrada para o cálculo do C013 Segredo
Partilhado............................................................................................. 6
2.1.2
O texto como parâmetro de entrada para o cálculo do C013 Segredo Partilhado7
2.1.3
Validação do C013 Segredo Partilhado ...................................................... 7
Anexo A – Funções de Hash ................................................................................. 8
3.1
Algoritmo de Secure Hash ................................................................................ 8
3.1.1
Descrição ............................................................................................. 8
3.1.2
Formato de entrada ............................................................................... 8
3.1.3
Formato de saída................................................................................... 9
3.1.4
Referência à norma................................................................................ 9
3.1.5
Exemplos de implementação ................................................................... 9
3.2
HMAC com SHA-1: Keyed-Hashing para Autenticação de Mensagens .................... 10
3.2.1
Descrição ........................................................................................... 10
3.2.2
Referencia à norma.............................................................................. 11
3.2.3
Casos de teste e exemplos de implementação.......................................... 11
4
Annex B - Exemplo de cálculo de C013 Segredos partilhados............................. 12
4.1.1
4.1.2
Exemplo 1 .......................................................................................... 12
Exemplo 2 .......................................................................................... 13
MBNet
Segredo Partilhado
Página 3
Documento Confidencial
Versão 00.22, 2006-05-20
Figuras
Figure 1 Exemplo do cartão do comerciante ..................................................................... 6
MBNet
Segredo Partilhado
Página 4
Documento Confidencial
Versão 00.22, 2006-05-20
1 Introdução
1.1 Objectivos
Este documento tem como objectivo descrever o processo computacional do criptograma
C013, denominado por Segredo Partilhado, utilizado no serviço MBNet.
1.2 Estrutura do documento
Este documento cobre os seguintes tópicos:
•
Geração e Validação do C013 Segredo Partilhado;
•
Funções de HASH com exemplos e guias de implementação.
1.3 Referências
•
Infra-estrutura do Terminal de Pagamento Automático Virtual - Documento Técnico Comerciante.
MBNet
Segredo Partilhado
Página 5
Documento Confidencial
Versão 00.22, 2006-05-20
2 Segredo Partilhado
Para proteger a integridade de alguns elementos de dados partilhados entre o servidor do
comerciante e o servidor de MBNet, o algoritmo Secure HMAC, baseado no algoritmo SHA-1, é
usado de forma a poder ser gerado o criptograma C013 Segredo Partilhado.
2.1 Geração e Validação do C013
O cálculo computacional do C013 Segredo Partilhado terá lugar em dois cenários distintos:
•
No momento de um post para o servidor MBNet – um C013 Segredo Partilhado terá que
ser gerado e incluído na mensagem a enviar ao comerciante;
•
Na recepção de uma mensagem do servidor de MBNet – o servidor tem que gerar um
C013 Segredo Partilhado e compará-lo com o que é recebido na mensagem recebida;
Em ambos os cenários, o C013 Segredo Partilhado deverá ser calculado com o algoritmo de
HMAC em função do texto e da chave de entrada.
2.1.1 A chave como parâmetro de entrada para o cálculo do C013
Segredo Partilhado
A chave utilizada para o cálculo do C013 Segredo Partilhado será o número em relevo inscrito
no cartão do comerciante.
Figura 1 Exemplo de cartão de comerciante
Neste exemplo a chave é:
Key
= "966004100350000010008" (ASCII format)
= 39 36 36 30 30 34 31 30 30 33 35 30 30 30 30 30 31 30 30 30 38 (HEX
format)
MBNet
Segredo Partilhado
Página 6
Documento Confidencial
Versão 00.22, 2006-05-20
2.1.2 O texto como parâmetro de entrada para o cálculo do C013
Segredo Partilhado
O texto a usar no cálculo do C013 Segredo Partilhado será o resultado da concatenação de
todos os campos da mensagem. Esta concatenação terá que cumprir as seguintes regras:
•
Campos numéricos:
Deverão ser completados (padded) com zeros à esquerda de forma a atingir o
seu tamanho máximo. Como exemplo, o campo A001 (Número do TPA Virtual, N
09) com o conteúdo "1234" deverá ser transformado em "000001234";
O separador decimal (o ponto decimal) deverá ser retirado. Como exemplo, o
campo A061 (Montante da Operação, N08) com o conteúdo "1.25" deverá ser
transformado em "00000125";
Se o campo for opcional (e não for enviado na mensagem ou no form), então
deverá ser usado o valor zero.
•
Campos alfanuméricos:
Os caracteres de espaço (" ") à esquerda e à direita deverão ser eliminados.
Se o campo for opcional (e não for enviado na mensagem ou no form), então
este não deverá ser incluído no texto.
2.1.3 Validação do C013 Segredo Partilhado
Para cada resposta recebida do servidor do MBNet que inclui o C013 Segredo Partilhado, o
servidor do comerciante deverá validar a integridade dos dados calculando o C013 Segredo
Partilhado sobre os dados especificados e comparando com o C013 Segredo Partilhado
recebido. Se este teste falhar, então não poderá haver confiança sobre os dados recebidos.
MBNet
Segredo Partilhado
Página 7
Documento Confidencial
Versão 00.22, 2006-05-20
3 Anexo A – Funções de Hash
3.1 Algoritmo de Secure Hash
CalculateSHA1 (Text Length, Text)
Input
Code
Name
Text Length
Text
Format
B
B
Lgth.
2
var
Contents
Name
SHA-1 Digest
Format
B
Lgth.
20
Contents
Output
Code
3.1.1 Descrição
O algoritmo SHA-1 é uma função de HASH sem chave que toma uma mensagem de
comprimento finito como parâmetro de entrada e que produz um resultado de comprimento
fixo conhecido como message digest, hash-value, ou simplesmente hash.
O resultado do SHA-1 é um valor de 160 bits que assume uma representação comprimida do
texto de entrada.
A especificação oficial do algoritmo é a norma FIPS 180-1.
Deve-se ter um cuidado especial com os formatos de entrada e de saída dos campos.
3.1.2 Formato de entrada
O texto de entrada deverá ser visto como uma sequência de bits (bitstring)
independentemente do seu formato ser ASCII ou valores hexadecimais puros. O comprimento
do texto deverá representar o número de bytes do texto de entrada. Seleccionando, por
exemplo, o primeiro vector de testes da norma oficial obtém-se:
SHA1 ("abc") = SHA1 (0x 616263) = CalculateSHA1 (0x0003, 0x616263)
MBNet
Segredo Partilhado
Página 8
Documento Confidencial
Versão 00.22, 2006-05-20
3.1.3 Formato de saída
A ordem dos bytes no campo de saída é frequentemente origem de problemas. Por causa
desta problemática denominada de endianess (alguns sistemas são big-endian enquanto
outros são little-endian) o resultado poderá por vezes ser mal interpretado. No caso do Hash o
valor de saída, de 160 bits, resulta da concatenação de 5 words de 32-bits:
SHA-1 Digest = H1 || H2 || H3 || H4 || H5
O resultado do SHA-1 é uma sequência de bytes que começam nos bytes de ordem superior do
H1 e terminam com os bytes de ordem menor do H5, Para exemplo anterior, o resultado será:
SHA1 (0x 616263) = 0x A9993E364706816ABA3E25717850C26C9CD0D89D
Em contraposição ao seguinte valor errado:
SHA1 (0x 616263) = 0x 363E99A96A81064771253EBA6CC250789DD8D09C.
3.1.4 Referência à norma
FIPS 180-1, "Secure Hash Standard", Federal Information Processing Standards Publication
180-1, <http://www.nist.gov/sha>, U.S. Department of Commerce/N.I.S.T., National Technical
Information Service, Springfield, Virginia, 1995 April 17 (Supersedes FIPS PUB 180 - 1993 May
11).
3.1.5 Exemplos de implementação
Os seguintes endereços de internet disponibilizam exemplos de implementação que cumprem
a norma SHA-1.
Public Domain C Implementation:
Steve Reid, <http://ftp.task.gda.pl/pub/security/crypto/HASH/sha/>
Public Domain C++ Implementation:
Wei Dai, <http://www.eskimo.com/~weidai/cryptlib.html>
Public Domain JAVA Implementation:
Jef Poskanzer, <http://www.acme.com/resources/classes/Acme/Crypto/ShaHash.java>
MBNet
Segredo Partilhado
Página 9
Documento Confidencial
Versão 00.22, 2006-05-20
Public Domain JAVASCRIPT Implementation:
Paul Johnston, <http://pajhome.org.uk/crypt/md5/sha1src.html>
3.2 HMAC com SHA-1: Keyed-Hashing para
Autenticação de Mensagens
CalculateHmacWithSha1 (Key Length, Key, Text Length, Text)
Input
Code
Name
Key Length
Key
Format
B
B
Text Length
Text
B
B
Lgth.
1
up to
64
2
var
Name
HMAC
Format
B
Lgth.
20
Contents
less than 20 bytes is
strongly discouraged
Output
Code
Contents
3.2.1 Descrição
Tipicamente os MACs (message authentication codes) são utilizados entre dois partidos que
partilham um segredo. O HMAC é um mecanismo que calcula MACs fazendo uso de funções de
Hash. Neste documento são apresentadas implementações do mecanismo de HMAC usando a
função de Hash SHA-1, sem modificações.
O resultado de HMAC com SHA-1 é um valor com 160-bits. A chave de autenticação pode ser
de qualquer comprimento até 64 bytes; o comprimento interno de um bloco na função de Hash
SHA-1. O comprimento mínimo recomendado para esta chave é de 20 bytes, i.e. o
cumprimento do resultado da função SHA-1.
A especificação oficial do algoritmo é o documento RFC-2104.
O cálculo do HMAC com SHA-1 sobre um dado texto "TEXT" usando uma chave "K" é
executado através dos seguintes passos:
Passo 1. Padding de Chaves
Acrescentar zeros à direita de “k” para criar uma sequência de 64 bytes de comprimento (por
exemplo, se “k” tiver 20 bytes de comprimento, então devem-se acrescentar a “k” 44 bytes
com conteúdo zero - 0x00). Append zeros to the end of K to create a 64-byte long string
(e.g., if K is 20 bytes long, then K will be appended with 44 zero bytes 0x00).
MBNet
Segredo Partilhado
Página 10
Documento Confidencial
Versão 00.22, 2006-05-20
K' = K [|| 00 || 00 || … || 00 ]
Passo 2. Primeiro Hash
Efectuar um XOR (OU-exclusivo ao nível do bit) entre a sequência K' e a sequência (ipad) que
consiste no byte 0x36 repetido 64 vezes.
Append the input TEXT to the result of the previous XOR and calculate an SHA1 over it.
Acrescentar o texto de entrada ao resultado do XOR anterior e calcular um SHA1 sobre esse
valor.
temp = CalculateSHA1 ((K' xor (0x36..0x36)) || TEXT)
20
64
64
var
Passo 3. Segundo Hash
Efectuar um XOR (OU-exclusivo ao nível do bit) entre a sequência K' e a sequência (opad) que
consiste no byte 0x5C repetido 64 vezes.
Append the temp string (calculated in the previous step) to the result of the previous XOR and
calculate an SHA1 over it.
Acrescentar a sequência temp (calculada no passo anterior) ao resultado do XOR anterior e
calcular um SHA1 sobre esse valor.
HmacWithSha1 = CalculateSHA1 ((K' xor (0x5C..0x5C)) || temp)
20
64
64
20
FIPS 180-1, "Secure Hash Standard", Federal Information Processing Standards Publication
180-1, <http://www.nist.gov/sha>, U.S. Department of Commerce/N.I.S.T., National Technical
Information Service, Springfield, Virginia, 1995 April 17 (Supersedes FIPS PUB 180 - 1993 May
11).
3.2.2 Referencia à norma
RFC 2104, "HMAC: Keyed-Hashing for Message Authentication", Network Working Group
Request for Comments: 2104, <ftp://ftp.isi.edu/in-notes/rfc2104.txt>, H. Krawczyk, M.
Bellare and R. Canetti, February 1997.
3.2.3 Casos de teste e exemplos de implementação
RFC 2202, "Test Cases for HMAC-MD5 and HMAC-SHA-1", Network Working Group Request for
Comments: 2202, <ftp://ftp.isi.edu/in-notes/rfc2202.txt>, P. Cheng and R. Glenn, September
1997.
MBNet
Segredo Partilhado
Página 11
Documento Confidencial
Versão 00.22, 2006-05-20
4 Annex B - Exemplo de cálculo
de C013 Segredos partilhados
A chave usada nestes exemplos é a seguinte:
Key
= "966004100350000010008" (ASCII format)
= 39 36 36 30 30 34 31 30 30 33 35 30 30 30 30 30 31 30 30 30 38 (Hex
format).
4.1.1 Exemplo 1
Input
Field
Format
field1
field1
field2
field3
field4
field5
field6
field7
field8
field9
N4
N9
N15
N4
N8
N1
N 16
N6
C3
C 128
Contents
"H005"
"1262"
"8989999990"
"9782"
"52.00"
"0"
"4279679800009876"
"200406"
"286"
" http://www.comerciante.pt "
Filtered Contents
"H005"
"000001262"
"000008989999990"
"9782"
"00005200"
"0"
"4279679800009876"
"200406"
"286"
"http://www.comerciante.pt"
Text = Concatenation of all filtered fields =
"H00500000126200000898999999097820000520004279679800009876200406286http://www.co
merciante.pt" (ASCII format)
= 48 30 30 35 30 30 30 30 30 31 32 36 32 30 30 30 30 30 38 39 38 39 39 39
39 39 39 30 39 37 38 32 30 30 30 30 35 32 30 30 30 34 32 37 39 36 37 39 38 30 30
30 30 39 38 37 36 32 30 30 34 30 36 32 38 36 68 74 74 70 3A 2F 2F 77 77 77 2E 63
6F 6D 65 72 63 69 61 6E 74 65 2E 70 74 (Hex format)
Passo 1. Padding de Chaves
K' = Key [|| 00 || 00 || … || 00 ] =
39 36 36 30 30 34 31 30 30 33 35 30 30 30 30 30 31 30 30 30 38 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 (Hex format)
Passo 2. Primeiro Hash
K' xor (0x36..0x36) = 0F 00 00 06 06 02 07 06 06 05 03 06 06 06 06 06 07 06 06
06 0E 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36
36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 (Hex format)
temp = CalculateSHA1 ((K' xor (0x36..0x36)) || TEXT) =
FC A8 83 52 5D 4C 4A 2D 3F E0 A4 07 FB 96 F7 28 87 B0 CD 5E (Hex format)
MBNet
Segredo Partilhado
Página 12
Documento Confidencial
Versão 00.22, 2006-05-20
Passo 3. Segundo Hash
K' xor (0x5C..0x5C) = 65 6A 6A 6C 6C 68 6D 6C 6C 6F 69 6C 6C 6C 6C 6C 6D 6C 6C
6C 64 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C
5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C (Hex format)
C013 = HmacWithSha1 = CalculateSHA1 ((K' xor (0x5C..0x5C)) || temp) =
6E 7C 0F 1B 07 F6 E3 52 05 62 4B C6 78 63 E1 1B 10 8D E2 BC (Hex format)
4.1.2 Exemplo 2
Input
Field
Format
field1
field2
field3
field4
field5
field6
field7
field8
field9
N4
N9
N15
N4
N8
N1
N 16
N6
C3
Contents
"H3D0"
"1425"
"1234567890"
"9782"
"12.34"
"0"
"4798123456789009"
"200412"
""
Filtered Contents
"H3D0"
"000001425"
"000001234567890"
"9782"
"00001234"
"0"
"4798123456789009"
"200412"
""
Text = Concatenation of all fields =
"H3D000000142500000123456789097820000123404798123456789009200412" (ASCII format)
= 48 33 44 30 30 30 30 30 30 31 34 32 35 30 30 30 30 30 31 32 33 34 35 36
37 38 39 30 39 37 38 32 30 30 30 30 31 32 33 34 30 34 37 39 38 31 32 33 34 35 36
37 38 39 30 30 39 32 30 30 34 31 32 (Hex format)
Passo 1. Padding de Chaves
K' = Key [|| 00 || 00 || … || 00 ] =
39 36 36 30 30 34 31 30 30 33 35 30 30 30 30 30 31 30 30 30 38 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 (Hex format)
Passo 2. Primeiro Hash
K' xor (0x36..0x36) = 0F 00 00 06 06 02 07 06 06 05 03 06 06 06 06 06 07 06 06
06 0E 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36
36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 36 (Hex format)
temp = CalculateSHA1 ((K' xor (0x36..0x36)) || TEXT) =
32 2A B9 E0 56 C2 39 0E FA C8 6E F7 DC BE 5A 08 A5 E1 68 C2 (Hex format)
Passo 3. Segundo Hash
K' xor (0x5C..0x5C) = 65 6A 6A 6C 6C 68 6D 6C 6C 6F 69 6C 6C 6C 6C 6C 6D 6C 6C
6C 64 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C
5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C 5C (Hex format)
C013 = HmacWithSha1 = CalculateSHA1 ((K' xor (0x5C..0x5C)) || temp) = 6B A7 B8
4F 4E F2 F0 85 A8 9B 00 9D E9 50 84 78 0B 3F 56 8A (Hex format)
MBNet
Segredo Partilhado
Página 13

Documentos relacionados