Repetidamente criptografar (preenchimento aleatório + const int32) - comprometer o segredo?
Algum esquema de criptografia permitirá que eu criptografe o mesmo número inteiro repetidamente, com material aleatório diferente prefixado a cada vez? Parece o tipo de operação que pode me pegar na água quente.
Quero evitar o spidering de itens em meu aplicativo da web, mas ainda tenho IDs / URLs de itens persistentes para que os links de conteúdo não expirem com o tempo. Meus requisitos de segurança não são muito altos para isso, mas prefiro não fazer algo totalmente idiota que obviamente comprometa o segredo.
// performed on each ID before transmitting item search results to the client
public int64 encryptWithRandomPadding(int32 id) {
int32 randomPadding = getNextRandomInt32();
return encrypt(((int64)randomPadding << 32) + id), SECRET);
}
// performed on an encrypted/padded ID for which the client requests details
public int32 decryptAndRemoveRandomPadding(int64 idToDecrypt) {
int64 idWithPadding = decrypt(idToDecrypt, SECRET);
return (int32)idWithPadding;
}
static readonly string SECRET = "thesecret";
IDs / URLs gerados são permanentes, os IDs criptografados são escassamente preenchidos (menos de 1 em uint32.Max são exclusivos e eu poderia adicionar outro preenchimento constante para reduzir a probabilidade de um palpite existente), e o cliente pode executar a mesma pesquisa e obtenha os mesmos resultados com diferentes IDs representativos de cada vez. Eu acho que atende aos meus requisitos, a menos que haja um problema criptográfico flagrante.
Exemplo:
encrypt(rndA + item1) -> tokenA
encrypt(rndB + item1) -> tokenB
encrypt(rndC + item2) -> tokenC
encrypt(rndD + item175) -> tokenD
Aqui, não há como identificar que tokenA e tokenB apontam para itens idênticos; isso impede que um spider elimine resultados de pesquisa duplicados sem recuperá-los (enquanto recupera incrementos no medidor de uso). Além disso, item2 pode não existir.
Saber que re-running uma pesquisa retornará o mesmo int32 acolchoado de várias maneiras com o mesmo segredo,posso fazer isso com segurança com qualquer algoritmo de criptografia popular? Obrigado, especialistas em criptografia!
nota: esta é uma continuação de uma pergunta que não funcionou como eu esperava:Criptografar inteiro com um segredo e um sal compartilhado