Gerenciamento de Chaves do Leitor HID NEW!
O módulo OMNIKEY Reader Core (OKRC) armazena suas chaves criptográficas em referências de chave internas (também chamadas de slots de chave). Os endpoints a seguir injetam essas chaves, consultam o que um slot contém e leem ou alteram os parâmetros de configuração (OIDs) do próprio módulo.
Disponível apenas na versão V7.
Estas operações seguem a hierarquia de chaves definida no OMNIKEY SE Reader Core User Guide (PLT-06682, seção 10.32). Todos os campos de chave, referência de chave e valor de OID são strings hexadecimais.
Hierarquia de chaves
As chaves são injetadas em cadeia, cada uma envolvida (wrapped) pela chave do nível acima:
| Nível | Endpoint | Finalidade |
|---|---|---|
| KEK padrão | hid_inject_default_kek | Substitui a Key Encryption Key de fábrica do leitor. Deve ser a primeira operação — a KEK de fábrica é obtida junto à HID Global. |
| KEK intermediária | hid_inject_custom_kek | Injeta uma KEK intermediária em uma referência de chave, envolvida por uma KEK já existente. |
| Chave de mídia | hid_inject_media_key | Injeta a chave final do cartão (por exemplo, uma chave de setor MIFARE), envolvida por uma KEK já existente. |
Modo plain e modo wrapped
Todos os endpoints de injeção aceitam a chave em um de dois modos, selecionado pela presença do campo kek no corpo da requisição — não existe um parâmetro de modo separado:
| Modo | Como selecionar | Significado |
|---|---|---|
| Plain | Envie kek | key e kek são enviadas em texto plano. O equipamento envolve a chave internamente antes de injetá-la. |
| Wrapped | Omita kek | key já vem envolvida pelo cliente, via NIST SP 800-38F KWP. |
O modo plain é mais simples de usar; o modo wrapped evita transmitir a KEK ao equipamento.
Alterar a KEK padrão
Substitui a Key Encryption Key de fábrica do leitor. Este é o ponto de entrada de toda a hierarquia de chaves: até que esta operação seja concluída com sucesso, nenhuma outra chave pode ser injetada.
POST /hid_inject_default_kek.fcgi
Parâmetros
- key (string): Obrigatório. A nova KEK, como string hexadecimal. No modo plain é a própria chave; no modo wrapped é a chave já envolvida por KWP.
- kek (string): Opcional. A KEK atual, em texto plano. Enviá-la seleciona o modo plain; omiti-la seleciona o modo wrapped.
- key_id (string): Opcional. Um identificador de 8 bytes, escolhido livremente pelo cliente, armazenado junto à chave para que ela possa ser reconhecida depois — o hid_get_key_info devolve esse mesmo valor. Aceito apenas neste endpoint (ver a observação abaixo).
Resposta
- success (bool):
truequando a chave foi injetada.
Se o módulo recusar a injeção, a chamada retorna o erro informado pelo leitor, ou "Key injection failed" quando o leitor não informa o motivo.
Exemplo de requisição
Modo plain, substituindo a KEK de fábrica e marcando-a com um identificador:
$.ajax({
url: "/hid_inject_default_kek.fcgi?session=" + session,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({
key: "1111111111111111111111111111111111111111111111111111111111111111",
kek: "65547522234A0B72CE20D458D91C1C2514362085C3C79A13641575F07CD4E627",
key_id: "4445464B45593031"
})
});
Exemplo de resposta
{
"success": true
}
Injetar uma KEK intermediária
Injeta uma KEK em uma referência de chave de destino, envolvida por uma KEK já presente em outra referência.
POST /hid_inject_custom_kek.fcgi
Parâmetros
- target_ref (string): Obrigatório. Referência de chave que receberá a chave, como string
hexadecimal. Exemplo:
"03F001". - kek_ref (string): Obrigatório. Referência de chave que contém a KEK usada para envolver
a nova chave. Exemplo:
"03F000". - key (string): Obrigatório. A chave a injetar, como string hexadecimal.
- kek (string): Opcional. Seleciona o modo plain, conforme descrito acima.
Resposta
- success (bool):
truequando a chave foi injetada.
Exemplo de requisição
$.ajax({
url: "/hid_inject_custom_kek.fcgi?session=" + session,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({
target_ref: "03F001",
kek_ref: "03F000",
key: "3333333333333333333333333333333333333333333333333333333333333333",
kek: "1111111111111111111111111111111111111111111111111111111111111111"
})
});
Injetar uma chave de mídia
Injeta a chave final do cartão — a chave efetivamente usada para ler um smartcard, como uma chave de setor MIFARE Classic. Recebe os mesmos parâmetros do hid_inject_custom_kek.
POST /hid_inject_media_key.fcgi
Parâmetros
- target_ref (string): Obrigatório. Referência de chave que receberá a chave. Exemplo:
"030101". - kek_ref (string): Obrigatório. Referência de chave que contém a KEK usada para envolver a chave.
- key (string): Obrigatório. A chave do cartão, como string hexadecimal. Uma chave MIFARE
Classic tem 6 bytes, por exemplo
"FFFFFFFFFFFF". - kek (string): Opcional. Seleciona o modo plain, conforme descrito acima.
Resposta
- success (bool):
truequando a chave foi injetada.
Exemplo de requisição
$.ajax({
url: "/hid_inject_media_key.fcgi?session=" + session,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({
target_ref: "030101",
kek_ref: "03F001",
key: "FFFFFFFFFFFF",
kek: "3333333333333333333333333333333333333333333333333333333333333333"
})
});
Consultar informações de uma chave
Informa o que uma referência de chave contém no momento. Útil para confirmar que uma injeção teve sucesso, já que as chaves em si nunca podem ser lidas de volta.
POST /hid_get_key_info.fcgi
Parâmetros
- target_ref (string): Obrigatório. Referência de chave a consultar, como string hexadecimal.
Resposta
- key_type (string): Tipo de chave armazenada na referência. Valores:
"KEK"(uma chave de criptografia de chaves) ou"MEDIA"(uma chave de cartão). - key_id (string): O identificador armazenado junto à chave, ou string vazia quando a chave não possui identificador.
Se a referência não contiver chave alguma, a chamada retorna o erro informado pelo leitor, ou "Key not found".
Observação sobre key_id: apenas o
hid_inject_default_kek aceita key_id, porque somente a
operação de KEK padrão subjacente expõe esse parâmetro. Portanto, chaves injetadas por
hid_inject_custom_kek ou hid_inject_media_key sempre retornam key_id vazio aqui, mesmo
imediatamente após uma injeção bem-sucedida.
Exemplo de requisição
$.ajax({
url: "/hid_get_key_info.fcgi?session=" + session,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ target_ref: "03F000" })
});
Exemplo de resposta
{
"key_type": "KEK",
"key_id": "4445464B45593031"
}
Parâmetros de configuração do leitor (OIDs)
Os dois endpoints a seguir leem e alteram qualquer parâmetro de configuração do OMNIKEY diretamente,
endereçado pelo seu OID em notação com pontos — sempre seis partes, por exemplo
"1.1.1.2.3.5".
Estes são os parâmetros internos do próprio módulo, distintos das configurações hid_reader de nível de equipamento descritas em Parâmetros de Configuração.
POST /hid_set_oid.fcgi
O tipo do valor é inferido a partir do tipo JSON do campo value — não existe um parâmetro de tipo separado.
Parâmetros
- oid (string): Obrigatório. OID do parâmetro, em notação com pontos.
- value (bool, int ou string): Obrigatório. O valor a escrever. Um booleano JSON é escrito como booleano, um número JSON como inteiro, e uma string JSON é tratada como sequência de bytes em hexadecimal. Qualquer outro tipo JSON retorna o erro "Invalid value: must be a bool, an int or a hex string".
Resposta
- success (bool):
truequando o parâmetro foi escrito.
Exemplo de requisição
Escreve uma sequência de bytes (a definição de um slot CPE):
$.ajax({
url: "/hid_set_oid.fcgi?session=" + session,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({
oid: "1.1.1.2.3.1",
value: "A261300161318244A1613002581CA361300161314E"
})
});
POST /hid_get_oid.fcgi
Parâmetros
- oid (string): Obrigatório. OID do parâmetro, em notação com pontos.
Resposta
- value (bool, int ou string): Valor atual do parâmetro. Como o leitor devolve bytes crus sem informação de tipo, o tipo é inferido pela quantidade de bytes: 1 byte é retornado como booleano, 4 bytes como inteiro, e qualquer outro tamanho como string hexadecimal.
Exemplo de requisição
$.ajax({
url: "/hid_get_oid.fcgi?session=" + session,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ oid: "1.1.1.2.3.1" })
});
Exemplo de resposta
{
"value": "A261300161318244A1613002581CA361300161314E"
}
Redefinir as configurações do leitor
Inicia — ou consulta o andamento de — um reset das configurações do módulo OMNIKEY, opcionalmente
restaurando um arquivo de configuração (config.orco) enviado no próprio corpo da requisição.
POST /hid_reset_config.fcgi
Parâmetros
- start (bool): Inicia o reset das configurações do leitor para os valores de fábrica. Se a chamada for feita sem start, apenas o andamento do reset em curso é consultado.
Para restaurar um arquivo .orco customizado em vez de fazer o reset de fábrica, envie o conteúdo
binário do arquivo no corpo da requisição, com Content-Type: application/octet-stream (sem
envelope JSON e sem o parâmetro start).
Resposta
- resetting (bool): Indica se o reset ainda está em andamento.
- status (string): Estado atual do reset. Valores:
"running"ou"done".
Se já houver um reset em andamento, uma nova chamada retorna o erro "HID reader config reset already in progress".
Exemplo de requisição
Inicia o reset com a configuração de fábrica:
$.ajax({
url: "/hid_reset_config.fcgi?session=" + session,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ start: true })
});
Exemplo de resposta
Enquanto o reset está em andamento:
{
"resetting": true,
"status": "running"
}
Após a conclusão (na chamada seguinte, sem start):
{
"resetting": false,
"status": "done"
}