Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.


...

Classe

...

tPBKDF2

PBKDF2 (Password-Based Key Derivation Function 2) é um algoritmo de derivação de chave amplamente utilizado que é projetado para aumentar a segurança de senhas e chaves mestras.

Ele é amplamente adotado em cenários de segurança (RFC2898 , incluindo o armazenamento seguro de senhas e a geração de chaves criptográficas.

Informações

Este padrão é útil em contextos onde é necessário garantir a integridade e a confidencialidade das informações, como em transações financeiras ou dados sensíveis.
Para maiores informações, recomenda-se a leitura da RFC2898:https://datatracker.ietf.org/doc/html/rfc2898#section-5.2

...

Observações

...

Exemplo

User Function testpbkdf2()

  Local oTokenPBKDF2 := Nil

  //Criando classe do PBKDF2
  oTokenPBKDF2:= tPBKDF2():New()
  
  //Informação da release utilizada da openssl
  conout("release: " )
  + oTokenPBKDF2:release() )
  
  //Parametro obrigatorio senhaParâmetro obrigatório, senha para iniciar a criptografia. 
  oTokenPBKDF2:setPassword("password")
  
  //Parametro obrigatorio Parâmetro obrigatório, salt , podendo ser string ou base64
  oTokenPBKDF2:setSalt("salt")
  
  //Número de iterationiteração, quantidade de rodadas de criptografia! RFC 2898 sugere no minimo mínimo 1000. Quanto maior mais difícil será desfazer via força bruta.
  oTokenPBKDF2:setIteration(10000)
  
  //Tamanho do buffer da chave de saidasaída em bytes.
  //8  bytes ou 64  bits
  //16 bytes ou 128 bits
  //32 bytes ou 256 bits
  //64 bytes ou 512 bits
  oTokenPBKDF2:setKeylength(16)
  
  //Função de digest usado na criptografia
  //. Ex: SHA1, SHA256, SHA512
  oTokenPBKDF2:setDigest("SHA256")
  
  //Função obrigatorio obrigatório usada para chamar a criptografia
  oTokenPBKDF2:encrypt() 
  
  //Funções de retorno
  //Neste caso saida saída com 32 caracteres (hexdecimal) 2 caracteres por byte. 
  conout("getKeyHex      Retorno em formato Hexadecimal : " + cValToChar( oTokenPBKDF2:getKeyHex() ))
  conout("getKeyRaw      Retorno em formato Raw : " + cValToChar( oTokenPBKDF2:getKeyRaw() ))  
  conout("getKeyBase64   Retorno em formato BASE64 : " + cValToChar( oTokenPBKDF2:getKeyBase64() ))  
  conout("getKeyBase64UrlRetorno em formato BASE64 Url Safe: " + cValToChar( oTokenPBKDF2:getKeyUrl_Base64() ))  
  
  //Importante sempre destruir a classe para evitar aumento de memoria no Appserver.
  FreeObj(oTokenPBKDF2)

   
Return

 
Abrangência

20.3.2.23


...

Construtores

New

Cria um objeto tPBKDF2 para configuração, criação, assinatura e manipulação de assinaturas.

Sintaxe
tPBKDF2():New() 
Retorno
NomeTipoDescrição
oObjobjectNova instância da classe tPBKDF2 
Exemplos
    Local oTokenPBKDF2 := tPBKDF2():New()

...

Métodos

A classe expõe os seguintes métodos:

setPassword

...

Ajusta a senha que será utilizado na criptografia.

Sintaxe
setPassword( < cAlgo > )
Parâmetros
NomeTipoDescriçãoObrigatórioReferência
cAlgocharacterPassword usado na criptografiaX
Exemplos
     oTokenPBKDF2:setPassword("password") 

...

setSalt

...

Ajusta o Salt ou palavra de derivação utilizada na criptografia.

Sintaxe
setSalt( < cAlgo > )
Parâmetros
NomeTipoDescriçãoObrigatórioReferência
cAlgocharactersalt usado na criptografiaX
Exemplos
    oTokenPBKDF2:setSalt("salt") 

...

setIteration

...

Ajusta o número de iterações utilizadas na criptografia, quanto maior o valor mais recurso será utilizado do processador e irá demorar mais para ser processado.
O número mínimo é de 1 e o valor recomendado é 1000.

Sintaxe
setIteration( < citeration > )
Parâmetros
NomeTipoDescriçãoObrigatórioReferência
citeration numéricoNúmero de iterações, rodadas de criptografia, a RFC 2898 sugere o uso de no mínimo 1000, default é 1000.

Exemplos
    oTokenPBKDF2:setIteration(10000) 

...

setKeylength

...

Ajusta o tamanho do buffer de saída em bytes, mínimo é de 8 bytes e máximo de 64 bytes.

Sintaxe
setKeylength( < ckeylength > )
Parâmetros
NomeTipoDescriçãoObrigatórioReferência
ckeylengthnumérico

Tamanho da chave de saída, em bytes. 

8  bytes ou 64  bits
16 bytes ou 128 bits
32 bytes ou 256 bits
64 bytes (Valor Máximo) ou 512 bits

X
Exemplos
    oTokenPBKDF2:setKeylength(16)

...

setDigest

...

Ajusta a função de digestão utilizado na criptografia.

Sintaxe
setDigest( < cdigest > )
Parâmetros
NomeTipoDescriçãoObrigatórioReferência
cdigest character

Função de digestão usada na criptografia.
Padrão: SHA256
SHA1, SHA224, SHA256, SHA384, SHA512, SHA512_224, SHA512_256, SHA3_224, SHA3_256, SHA3_384, SHA3_512.



Exemplos
    oTokenPBKDF2:setDigest("SHA256")

...

encrypt

...

Função deve ser chamada obrigatoriamente após os ajustes acima.  

Sintaxe
encrypt()
Parâmetros

Obrigatório a chamada desta função para criptografar os dados e também identificar erros.

Exemplos
    oTokenPBKDF2:encrypt() 

...

Funções de retorno.

getKeyHex

...

Função de retorno da criptografia em Hexadecimal, 2 caracteres por byte em maiúsculo os bytes são definidos no setKeyLength.

Sintaxe
getKeyHex()
Exemplos
    oTokenPBKDF2:getKeyHex()

...

getKeyRaw

...

getKeyBase64() //Formato BASE64, RFC1521 

...

Função de retorno da criptografia em formato RAW.

Sintaxe
getKeyRaw()
Exemplos
    oTokenPBKDF2:getKeyRaw()

...

getKeyBase64

Função de retorno da criptografia em formato Base64 (RFC1521).

Sintaxe
getKeyBase64()
Exemplos
    oTokenPBKDF2:getKeyBase64()

...

getKeyUrl_Base64

Função de retorno da criptografia em formato Base64 URL Applications (RFC4648).

Sintaxe
getKeyUrl_Base64()
Exemplos
    oTokenPBKDF2:getKeyUrl_Base64()

...

release

...

Obtém a versão da lib da openssl utilizada.

Sintaxe  oTokenPBKDF2:release()
release()
Exemplos
    conout("Versão da openssl: " + oTokenPBKDF2:release())

...

getLastError

Obtém o registro de erro da última operação executada sem sucesso.

Sintaxe  oTokenPBKDF2:getLastError()
getLastError()
Exemplos

...

conout("Erro

...

na

...

geração

...

da

...

criptografia.

...

Error:

...

"

...

+

...

oTokenPBKDF2:getLastError())

...



Saída de erros, todos serão impresso no console.log.

CausaErros
setPassword não informado.PBKDF2 The password is not provided.
setSalt não informado.PBKDF2 The salt is missing.
setSalt contém mais de 64 caracteres.PBKDF2 The salt size is greater than 64, too large.
setIteration informado menor que 1.PBKDF2 The minimum number of iterations is 1.
setKeylength informado menor que 8.PBKDF2 The minimum key size is 8 bytes or 64 bits.
setKeylength informado maior que 8.PBKDF2 The maximum key size is 64 bytes or 512 bits.
setDigest invalido, consulte a lista da documentação.PBKDF2 Invalid digest.
Erro ao gerar o PBKDF2PKCS5_PBKDF2_HMAC_SHA1 failed.



...


Testes de iteration e tempo médio de execução.

Informações

Abaixo consta um exemplo de reprodução, aumentando as iterações "iteration" demonstrando que quanto maior o número mais demora para terminar o processamento.
Em caso de utilização de maquinas mais fracas o tempo aumentará, podendo dar a falsa impressão de lentidão no Application Server.

Tempo médio:

9.999.999 iterations 11 segundos. 

...