Post on 19-Apr-2015
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 pseudo-randô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 - Funcionalidadesuint32_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 - FuncionalidadesAPKeyInfoType 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 - Funcionalidadesstatus_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 - Funcionalidadesstatus_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 - Funcionalidadesstatus_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 DER-encoded 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 aplicações
Banco de dados segurosAzmRuleSetType dbRuleSet;AmTokenType usertoken;
UInt32 action = dbActionRead | dbActionWrite | dbActionDelete
| dbActionBackup | dbActionRestore | dbActionEditSchema;
// Create DB – get AZM ruleset referenceDbCreateSecureDatabase(“My DB”, ‘crea’, ‘type’,
numSchemas, schemaList, &dbRuleSet, &dbID);
// Set user password required for ALL actionsAmGetTokenBySystemId(&usertoken,
SysUserToken);AzmAddRule(dbRuleSet, action , "%t", usertoken);
Componentes
Segurança e Criptografia
Dúvidas?
Dúvidas