Segurança e
Criptografia
Componentes
Algoritmos de
Criptografia
• O Palm OS
Cobalt prevê
suporte ao uso
de diversos
algoritmos de
criptografia,
integrados pelo
Cryptographic
Provider
Manager (CPM)
Algoritmos de
Criptografia
• O provider padrão, que vem com o
Palm OS Cobalt, foi desenvolvido
pela RSA Security e inclui um
gerador de números pseudorandômicos e suporte a RC4 de 128
bits, SHA-1 hashing e RSA public
key operations
• Se necessário, Providers adicionais
podem ser adicionados tanto
estática quanto dinamicamente
(DLLs assinadas) ao Cryptographic
Provider Manager
Cryptographic Provider
Manager (CPM)
• Provê uma API
unificada para
acesso a
funções de
criptografar,
descriptografar,
assinar e
verificar
assinaturas
Cryptographic Provider
Manager (CPM)
• Seu uso é simples, abstraindo
os detalhes de implementação
dos algoritmos de criptografia
CPM - Funcionalidades
1. Permite ao usuário descobrir
quais os Providers presentes
CPM - Funcionalidades
uint32_t *providers;
APProviderInfoType providerInfo;
uint16_t nProviders = 0;
CPMLibOpen(&nProviders);
DbgPrintf("SSFD: CPMLibOpen - 0x%x providers returned\n",
nProviders );
providers = MemPtrNew(sizeof(uint32_t) * nProviders );
CPMLibEnumerateProviders(providers, &nProviders );
DbgPrintf("SSFD: CPMLibEnumerateProviders - 0x%x
providers returned\n", nProviders);
for (i=0; i < temp; i++) {
CPMLibGetProviderInfo(providers[i], &providerInfo);
DbgPrintf("\t%s\n", providerInfo.name);
DbgPrintf("\t%s\n", providerInfo.other);
DbgPrintf("\tAlgs: %d\n",providerInfo.numAlgorithms);
DbgPrintf("\tHardware?: %s\n",
providerInfo.bHardware?"yes":"no");
}
CPM - Funcionalidades
2. Permite gerar chaves
abstraindo o algoritmo
utilizado
CPM - Funcionalidades
APKeyInfoType keyInfo;
uint8_t *seedData;
uint32_t seedDataLength;
/* KeyInfo provê as funcionalidades para as chaves do
algoritmo utilizado. */
MemSet(&keyInfo, sizeof(APKeyInfoType), 0);
keyInfo.type = apSymmetricTypeRijndael;
keyInfo.length = 32; /* bytes */
/* Pega uma seed do gerador pseudo-randomico padrão
*/
GetSomeSeedData(seedData, seedDataLength);
/* Gera a chave e armazena em KeyInfo */
CPMLibGenerateKey(seedData, seedDataLength,
&keyInfo);
CPM - Funcionalidades
3. Permite o uso de Message
Digests (hashes)
CPM - Funcionalidades
status_t err;
uint32_t size;
uint8_t data[] = ( 'f', 'o', 'o' );
/* Aloca um buffer de 0 bytes */
uint8_t *md = NULL;
size = 0;
err = CPMLibHash(apHashTypeSHA1, NULL, data, sizeof(data),
md, &size);
/* Se o tamanho do buffer for menor que o necessário (que é o
caso), o CPM modifica o valor de size para o tamanho
mínimo e retorna um código de erro */
if (err == cpmErrBufTooSmall) {
md = MemPtrNew(size);
CPMLibHash(apHashTypeSHA1, NULL, data, sizeof(data),
md, &size);
}
CPM - Funcionalidades
4. Permite o uso de funções para
encriptar dados a partir de
uma chave gerada...
CPM - Funcionalidades
status_t err;
uint8_t key[] = {0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A, 0x6E,0x57};
uint8_t plain[] = {0x01, 0xA1, 0xD6, 0xD0, 0x39, 0x77, 0x67,0x42};
uint32_t index, size;
uint8_t *output = NULL;
APKeyInfoType keyInfo;
MemSet(&keyInfo, sizeof(APKeyInfoType), 0);
keyInfo.type = apSymmetricTypeDES;
CPMLibImportKeyInfo(IMPORT_EXPORT_TYPE_RAW, key, 8, &keyInfo);
size = 0;
err = CPMLibEncrypt(&keyInfo, NULL, plain, 8, output,&size);
if (err = cpmErrBufTooSmall) {
output = MemPtrNew(size);
if (output != NULL) {
err = CPMLibEncrypt(&keyInfo, NULL, plain, 8, output, &size);
MemPtrFree(output);
}
CPM - Funcionalidades
5. ...E descriptografá-los.
CPM - Funcionalidades
status_t err;
uint8_t key[] = {0x7C, 0xA1, 0x10, 0x45, 0x4A, 0x1A,
0x6E,0x57};
uint8_t cipher[] = {0x69, 0x0F, 0x5B, 0x0D, 0x9A, 0x26,
0x93,0x9B};
uint32_t index, size;
uint8_t *output = NULL;
/* Obtêm ou inicializa KeyInfo */
APKeyInfoType keyInfo;
(...)
size = 0;
err = CPMLibDecrypt(&keyInfo, NULL, cipher, 8, output,&size);
if (err = cpmErrBufTooSmall) {
output = MemPtrNew(size);
if (output != NULL) {
err = CPMLibDecrypt(&keyInfo, NULL, cipher, 8, output,
&size);
MemPtrFree(output);
}
Certificate Manager
• Armazena, importa,
exporta e verifica
certificados DERencoded X.509
• Por ter uma
funcionalidade muito
específica,
normalmente é usado
apenas pelas APIs de
SSL e Signature Verify
Library
• Quando necessário,
utiliza as
funcionalidades da
Data Manager para
evitar mudanças nos
certificados
armazenados
SSL
• O módulo de
SSL provê
suporte nativo
ao protocolo de
rede homônimo
Signature Verify Library
• Provê um
módulo para
aplicações
acessarem
assinaturas e
certificados de
maneira
simples
Autenticação e assinaturas de
sistema
Código assinado
• Aplicações são assinadas quando a
integridade do código é uma
preocupação
• Dependendo do dispositivo, parte
do código – como um patch do
sistema – deve ser assinado
• Além disso, base de dados seguras
podem ser configuradas de maneira
a permitir acesso apenas a um
grupo particular de aplicações
assinadas
O que pode ser
assinado?
•
•
•
•
•
Applications
System patches
Shared libraries
System components
System drivers
Para que servem
assinaturas?
• No Palm, assinaturas
normalmente indicam
aprovação e compatibilidade
• Não indicam necessariamente
o autor do código ou recurso
Authentication Manager
(AM)
• Responsável
por autenticar
usuários ou
aplicações
• Responde a
questão “Você
é X?” através
de métodos
como senhas e
assinaturas de
código
Authentication Manager
(AM)
• É o AM o responsável por
verificar a assinatura do código,
garantindo que os patches e
objetos modificáveis mais
importantes do sistema tenham
uma assinatura de uma
autoridade conhecida
Authorization Manager
(AZM)
Authorization Manager
(AZM)
• Controla
árvores
baseadas em
autenticações
• A árvore ao
lado, dá
autorização a
uma aplicação
com a
assinatura “A”
ou “B”
Data Manager
• Dá suporte a
banco de dados
seguros
• Utiliza o
Authorization
Manager para
tratar as
permissões de
acesso aos
dados
Banco de dados
seguros
• Quando se cria uma base de
dados segura, o acesso aos
dados é dado apenas ao
criador, que é o único que tem
permissão de modificar as
regras de controle de acesso
• Dessa forma, uma aplicação
que crie um banco de dados
seguros deve modificar as
regras de controle que desejar
disponibilizar para outras
Banco de dados
seguros
AzmRuleSetType dbRuleSet;
AmTokenType usertoken;
UInt32 action = dbActionRead | dbActionWrite |
dbActionDelete
| dbActionBackup | dbActionRestore |
dbActionEditSchema;
// Create DB – get AZM ruleset reference
DbCreateSecureDatabase(“My DB”, ‘crea’, ‘type’,
numSchemas, schemaList, &dbRuleSet, &dbID);
// Set user password required for ALL actions
AmGetTokenBySystemId(&usertoken,
SysUserToken);
AzmAddRule(dbRuleSet, action , "%t", usertoken);
Componentes
Segurança e
Criptografia
Dúvidas?
Dúvidas
Download

hbas palm