48
EN GIN E CMD BASE, seguindo com ENGINE CMD BASE + 1, ...),
nome do commando, sua descric¸
˜
ao e o tipo do valor de entrada esperado. Os
poss
´
ıveis tipos de respostas s
˜
ao: num
´
erico ou texto. Os comandos ainda podem
n
˜
ao necessitar nenhuma entrada ou at
´
e mesmo ser marcado para uso interno;
• struct ref e f unct ref : utilizado pelo OpenSSL para controle do n
´
umero de re-
fer
ˆ
encias
`
a estrutura e ao conjunto de func¸
˜
oes de uma engine. Garante a utilizac¸
˜
ao
da engine em v
´
arias partes do aplicac¸
˜
ao, evitando, por exemplo, a inicializac¸
˜
ao de
uma engine j
´
a inicializada;
• outros: par
ˆ
ametros utilizados para controle interno, como prev e next, que mant
ˆ
em
uma lista duplamente encadeada das engines dispon
´
ıveis, ex data, utilizada para
armazenamento de dados referente a engine e f lags, que define suas caracter
´
ısticas.
Algumas peculiaridades devem ser levadas em conta no desenvolvi-
mento de uma engine OpenSSL para a utilizac¸
˜
ao de chaves gerenciadas por um HSM.
Primeiramente, o que fazer com a func¸
˜
ao loadprivkey, j
´
a que n
˜
ao se quer carregar a chave
privada na mem
´
oria da m
´
aquina hospedeira, n
˜
ao faria o m
´
ınimo sentido utilizar uma HSM
para proteger o ciclo de vida de chaves criptogr
´
aficas e deix
´
a-la em aberto desta forma.
Uma abordagem comum para resolver esse problema
´
e retornar a chave p
´
ublica nas duas
func¸
˜
oes loadprivkey e loadpubkey. Em um primeiro momento pode parecer estranho,
mas isso
´
e poss
´
ıvel porque al
´
em de o OpenSSL utilizar uma
´
unica estrutura para repre-
sentar chaves p
´
ublicas e privadas de um mesmo algoritmo, ser
´
a a engine que ir
´
a executar
as operac¸
˜
oes sobre essa chave. Portanto, toda vez que uma operac¸
˜
ao com a chave privada
for realizada, a pr
´
opria engine ser
´
a chamada e a chave privada correta pode ser identifi-
cada baseado na chave p
´
ublica, utilizando seus valores p
´
ublicos (n
´
umeros primos n e e)
ou atrav
´
es do identificador da chave explicitamente armazenado na vari
´
avel exdata, que
como na engine, existe tamb
´
em nas estruturas de chaves.
Adicionalmente, a estrutura de chaves criptogr
´
aficas da biblioteca pos-
sui um atributo chamado engine, que aponta para a engine respons
´
avel por realizar as
operac¸
˜
oes criptogr
´
aficas da chave. Portanto, ap
´
os a carga da chave atr
´
aves das func¸
˜
oes
l oad privkey e load pubkey, deve-se substituir o valor deste atributo pela engine atual.