1
Instituto de Computação, Universidade Estadual de Campinas (Unicamp)
{conradoplg,jlopez}@ic.unicamp.br
Abstract. We describe an efficient software implementation of Elliptic Curve Cryptography (ECC) and Pairing-Based Cryptography (PBC) for wireless sen- sor networks. Our implementation targets the MSP430 microcontroller, which is used in some sensors including the Tmote Sky and TelosB. For the PBC, we have implemented the pairing computation on MNT and BN curves over prime fields; for the ECC, the signature scheme ECDSA over prime fields for the 80-bit and 128-bit security levels. The main contributions of this work are an in-depth study of bilinear pairings algorithms and new optimizations for the prime field arithmetic in the MSP430.
Resumo. Descreve-se uma implementação eficiente em software de Criptogra- fia de Curvas Elípticas (CCE) e de Criptografia Baseada em Emparelhamentos (CBE) para redes de sensores sem fio. Nossa implementação foca a família de microcontroladores MSP430 de 16 bits, utilizada em sensores como o Tmote Sky e TelosB. Para a CBE, foram implementados emparelhamentos nas curvas MNT e BN sobre corpos primos; para a CCE, foi implementado o esquema de assinatura digital ECDSA sobre corpos primos para os níveis de segurança de 80 e 128 bits. As principais contribuições deste trabalho são um estudo apro- fundado dos algoritmos de emparelhamentos bilineares e novas otimizações na aritmética de corpos primos para a MSP430.
1. Introdução
Redes de sensores sem fio são compostas por inúmeros dispositivos posicionados em uma área de interesse, cuja finalidade é coletar dados sobre o ambiente e enviá-los para uma estação base próxima. Idealmente, tais sensores devem ter baixo custo (muitas vezes, são descartáveis) e por esta razão normalmente têm capacidade extremamente limitada. As- sim, proteger a sua comunicação, que é facilmente interceptável, consiste em um desafio que tem motivado muitos trabalhos. Como a fonte de energia de tais sensores é restrita, é importante que as primitivas criptográficas sejam implementadas da forma mais eficiente possível, aumentando a vida útil do sensor.
A abordagem mais simples para garantir a segurança em redes de sensores é o uso de criptografia simétrica. Nela, contudo, o problema de distribuição de chaves se torna um obstáculo. Pode-se utilizar uma mesma chave para todos os sensores, porém, se um atacante comprometer um dos sensores, toda a rede é comprometida. Pode-se utilizar uma chave para cada par de sensores, porém, torna-se inviável armazenar todas as chaves necessárias em cada sensor. Assim, foi bem estabelecida na literatura recente as vantagens
531
da criptografia assimétrica sobre a simétrica neste cenário. Na assimétrica, dois sistemas de chave pública se sobressaem: a Criptografia de Curvas Elípticas (CCE) e a Criptografia Baseada em Emparelhamentos (CBE).
Na CCE, para enviar uma mensagem cifrada, por exemplo, basta que o sensor obtenha a chave pública do destinatário e ele a utiliza para cifrar a mensagem. Contudo, ainda existe o problema de como autenticar chaves públicas, o que requer uma infra- estrutura de chaves públicas muitas vezes cara (ressalta-se, porém, a existência de técni- cas para reduzir tal custo, como certificados implícitos). Neste contexto, surgiu a Crip- tografia Baseada em Identidades (CBI), onde a chave pública consiste na identidade do participante (como seu e-mail ou número de série) e assim tais chaves são implicitamente autenticadas. A sua desvantagem é requerer um Centro de Geração de Chaves (CGC) responsável por gerar as chaves privadas dos participantes do sistema e que portanto pode se fazer passar por qualquer um deles. Porém, no cenário de redes de sensores sem fio, tal centro é aceitável porque os sensores confiam implicitamente no CGC, que consiste nos próprios administradores da rede. A CBI foi instanciada concretamente em 2000–2001 através da Criptografia Baseada em Emparelhamentos (CBE) com os trabalhos de Sakai, Ohgishi e Kasahara e de Boneh e Franklin.
Neste artigo, apresentam-se as contribuições da dissertação de mestrado
1de mesmo título defendida no programa de Mestrado em Ciência da Computação do Ins- tituto de Computação da Universidade Estadual de Campinas. O objetivo de tal trabalho consiste em uma implementação eficiente em software de CCE e CBE para redes de sen- sores sem fio. A plataforma alvo é o microcontrolador de 16 bits MSP430 da Texas Ins- truments utilizada em sensores como Tmote Sky, TelosB e TinyNode. Tal plataforma foi escolhida por possuir um ambiente de simulação de fácil acesso que permite a implemen- tação mesmo sem o hardware subjacente; ser uma plataforma com grandes limitações de espaço e memória e portanto servindo como exemplo de cenário restrito; e por se acreditar que plataformas de 16 bits possam se tornar mais populares com o avanço da tecnologia de sensores.
2. A Família MSP430
Os microcontroladores da família MSP430 possuem várias características em comum como serem de 16 bits e possuírem o mesmo conjunto de 27 instruções e 12 registra- dores de propósito geral. A frequência de clock e tamanhos de ROM e RAM variam para cada membro — o MSP430F1611, utilizado pelo Tmote Sky e TelosB, possui clock de 8 MHz, 48 KB de ROM e 10 KB de RAM.
O conjunto de instruções da família MSP430 inclui adições, subtrações e shifts de apenas um bit. Não há instrução de divisão. Operandos podem ser referenciados através de quatro modos de endereçamento. Multiplicações de números inteiros são realizadas através de um multiplicador em hardware, um periférico mapeado em memória presente nos dois modelos citados. Tal multiplicador suporta quatro operações: multiplicar com ou sem sinal (MPY/MPYS), e multiplicar e acumular com ou sem sinal (MAC/MACS).
Para utilizar tal periférico, escreve-se os dois operandos de 16 bits em certas posições da memória, e após dois ciclos, tem-se o resultado de 32 bits em duas posições de memória de 16 bits (RESLO e RESHI). Caso seja utilizada a operação MAC ou MACS, o carry
1
disponível em http://www.lca.ic.unicamp.br/~conradoplg/dissertacao.pdf
da acumulação é disponibilizado em uma terceira posição da memória (SUMEXT). As- sim, esta plataforma apresenta a peculiaridade de serem necessárias leituras e escritas da memória para se realizar multiplicações.
O número de ciclos tomado na execução de uma instrução é calculado de forma re- lativamente simples, salvo algumas exceções. Primeiramente, é necessário um ciclo para se ler a instrução propriamente dita. Adiciona-se um ciclo para cada origem em memória (leitura) e dois ciclos para cada destino em memória (escrita). Finalmente, adiciona-se um ciclo para cada palavra de offset utilizada.
3. Contribuições
Em última instância, protocolos de CCE e CBE são construídos sobre a aritmética de corpos finitos. Neste trabalho, focou-se em corpos finitos primos, isto é, F
ponde p é um primo grande. Para o nível de segurança de 80 bits, foi utilizado um primo de 160 bits, e para o nível de 128 bits, um primo de 256 bits.
Um corpo finito primo contém os números entre 0 e p − 1, inclusive, onde p é o módulo primo utilizado. Em software, tais números são representados por vetores de dígi- tos nativos da plataforma subjacente; seja n o número de dígitos necessários (no MSP430, n = 10 para primos de 160 bits e n = 16 para primos de 256 bits). A multiplicação de dois elementos de um corpo primo consiste na multiplicação inteira de precisão múltipla dos dois elementos de forma a obter um resultado de 2n dígitos, e a posterior redução módulo p de forma a obter um resultado de n dígitos. Tal operação de multiplicação no corpo compõe cerca de 75% do tempo de execução de protocolos de CCE e CBE. Por esse motivo, é de grande importância que ela seja otimizada o máximo possível, pois qualquer ganho em seu tempo de execução acarretará em ganhos significativos de desempenho no protocolo criptográfico sobrejacente.
3.1. Multiplicação de Precisão Múltipla
A multiplicação de inteiros de precisão múltipla geralmente é realizada com o algoritmo Comba, uma variação orientada a colunas do algoritmo usual de multiplicação que se aprende na escola. Em tal algoritmo, o dígito k do resultado (0 ≤ k < 2n) é calculado multiplicando os pares de dígitos cujos índices somam k e somando o resultado de cada multiplicação. Por exemplo, o dígito de índice k = 2 de c = ab é calculado com c
2= a
0b
2+ a
1b
1+ a
2b
0. Também pode-se utilizar a multiplicação Híbrida [Gura et al. 2004], que combina o Comba com a técnica usual de forma a utilizar mais registradores.
A implementação mais rápida de multiplicação para a MSP430 conhecida até en-
tão era a descrita em [Scott and Szczechowiak 2007, Szczechowiak et al. 2009], onde é
utilizada a multiplicação Híbrida com grupos de tamanho 2. Tal método parece ser o
mais adequado sempre que existem registradores o suficiente na plataforma, como é o
caso da MSP430. Porém, tal abordagem não considera todos os recursos disponíveis da
plataforma. Estudando-se a multiplicação Comba, pode-se observar que cada coluna do
resultado é computada através de múltiplos passos de multiplicar e acumular. A observa-
ção chave para se melhorar o desempenho da multiplicação é que tal passo de multiplicar
e acumular é precisamente o que é fornecido pela operação MAC do multiplicador em
hardware da MSP430.
Figura 1. Passo na multiplicação Comba normal à esquerda e usando MAC à direita, computando a
0b
1Suponha que o ponteiro para o operando a esteja em r15 e o ponteiro do operando b esteja em r14, e os acumuladores sejam r4, r5 e r6, do menos para o mais signifi- cativo. Considere o passo de multiplicar e acumular de a
0b
1. Tal passo, na multiplicação Comba normal, está ilustrado na Figura 1 e consiste no seguinte código assembly:
mov 0(r14),&__MPY mov 2(r15),&__OP2 add &__RESLO,r4 addc &__RESHI,r5 adc r6
O mesmo passo, utilizando MAC, está ilustrado na Figura 1 e consiste no seguinte código:
mov 0(r14),&__MAC mov 2(r15),&__OP2 addc &__SUMEXT,r6
A versão utilizando MAC possui duas instruções, uma leitura e um endereço em palavra de offset a menos em relação à versão comum, utilizando portanto 4 ciclos a me- nos. Como cada passo é executado n
2vezes, com n sendo o número de inteiros dos operandos, então tal ganho se torna considerável. Naturalmente, nota-se que tal compa- ração é com a multiplicação Comba normal, e não com a multiplicação Híbrida, que não possui um conceito de “passo” tão bem definido, dificultando comparações diretas. Con- tudo, resultados experimentais confirmam que o uso de Comba com MAC fornece um desempenho melhor do que o uso de Híbrida.
3.2. Redução
Para a redução modular, selecionou-se a redução Montgomery [Montgomery 1985] por
não necessitar de divisões, que não estão disponíveis no MSP430. Ao examinar tal algo-
ritmo, pode-se verificar que ele tem estrutura idêntica à multiplicação Comba. As únicas
diferenças são que os operandos consistem no módulo primo e em um número que é gerado no percorrer do algoritmo; e que o resultado é acrescentado ao número sendo reduzido. Por esse motivo, pode-se utilizar a mesma otimização com a operação MAC.
No contexto de CBE, encontrou-se uma otimização bastante eficaz para a redução modular. Foram utilizadas curvas elípticas BN [Barreto and Naehrig 2006], e nelas o módulo primo é dado pelo polinômio p(x) = 36x
4+ 36x
3+ 24x
2+ 6x + 1, onde x é o parâmetro que define a curva sendo utilizada. Considere as curvas geradas pelos valores x = 2
38+ 2
5+ 2
4+ 1 (adequada para o nível de segurança de 80 bits) e x = −2
62− 2
55− 1 (sugerida em [Nogami et al. 2008], adequada para 128 bits). Os módulos primos, nesses casos, são
p
1= 0x2400 0000 6ED0 0000 7FE9 C000 419F EC80 0CA0 35C7, p
2= 0x2523 6482 4000 0001 BA34 4D80 0000 0008
6121 0000 0000 0013 A700 0000 0000 0013,
respectivamente, na base 16. Pode-se observar que p
1possui dois dígitos de 16 bits va- lendo zero enquanto p
2possui cinco dígitos valendo zero e um dígito valendo um. Como a redução Montgomery é análoga a uma multiplicação, pode-se descartar os passos envol- vendo multiplicações por dígitos zero e otimizar passos envolvendo multiplicações por dígitos um. Por exemplo, para p
2, antes eram necessários 16
2= 256 passos de multi- plicar e acumular durante a redução Montgomery. Ignorando-se os passos envolvendo multiplicações por zero, são necessários 256 − 16 · 5 = 176 passos, uma redução de 31%.
4. Implementação
O código de nossa implementação foi escrito na linguagem C, com operações críticas da aritmética de corpo finito escritas na linguagem assembly. Tal implementação foi integrada com o toolkit criptográfico RELIC
2. Utilizou-se o compilador MSPGCC 3.2.3.
Para a CCE, foi implementado o protocolo Elliptic Curve Digital Signa- ture Algorithm (ECDSA) [National Institute of Standards and Technology 2009] de as- sinatura digital, por ser extremamente popular e padronizado. Também dando ênfase em padrões, escolheu-se as curvas secp160r1 [Certicom Research 2010] e P-256 [National Institute of Standards and Technology 2009]. Para a CBE foi implemen- tado o protocolo de acordo de chaves não interativo proposto por [Sakai et al. 2000]
e generalizado por [Dupont and Enge 2006], onde ele é denominado Non-Interactive Key Distribution Protocol (NIKDP). Tal protocolo permite duas entidades combina- rem uma chave mútua sem se comunicarem, somente possuindo a identidade um do ou- tro. Por esse motivo, ele é bastante interessante para redes de sensores sem fio, pois nos sensores a comunicação geralmente consome muito mais energia do que a com- putação. Os emparelhamentos escolhidos para se implementar o NIKDP foram o Tate sobre curvas MNT [Miyaji et al. 2001] e o R-ate, Optimal Ate e Xate sobre curvas BN [Barreto and Naehrig 2006].
5. Resultados
Utilizando o simulador MSPsim [Eriksson et al. 2007], foi realizada a medição dos ciclos de cada operação implementada. Os tempos em segundos são derivados do número de
2