Šifrovací knihovna v mém programovacím jazyce nepodporuje CTR, ačkoli podporuje CBC, CFB, CTS, ECB a OFB. Předpokládám, že je teoreticky možné bezpečně implementovat CTR kolem jednoho z těchto dalších režimů.
Takže mě zajímá, jsou tyto citace popisující správnou implementaci CTR z hlediska bezpečnosti? Pokud jsem četl, myslím, že jsou, ale chci se jen ujistit, že mi něco nechybí.
Studoval jsem trochu víc a zjistil jsem, že bloková transformace pro CTR režim je opravdu jen výsledkem toho, že XOR provede prostý text s AES ECB transformací monotinicky rostoucího počitadla. S tímto porozuměním jsem dokázal docela snadno implementovat režim AES CTR nad režim AES ECB, který je zabudován do .NET BCL.
A,
Je možné implementovat AES krypto v režimu CTR pomocí třídy AesManaged, i když to vyžaduje nějakou práci navíc. Chcete-li implementovat režim CTR s třídou .NET AesManaged, udělám to takto: Použijte CipherMode.ECB, PaddingMode.None. [V režimu CTR není nutná žádná výplň, protože vždy šifrujeme 16bajtový čítač.] Při šifrování volejte CreateEncryptor (). Pomocí výsledné ICryptoTransform pro každý blok transformujte nonce 16 bajtů (stejné jako velikost bloku AES) a poté XOR výsledek této transformace s holým textem, abyste získali ciphertext. Zvyšuje nonce po každém bloku. Pokračujte, dokud už nebudou žádné bloky - nezapomeňte na finální transformaci bloku pro poslední blok 16 nebo méně bajtů.
Jedna věc, když citát říká „přírůstek“ jaký by to měl být přírůstek? Určitě ne lineární?