# How to encrypt huge amount of data using AES-CTR

As far as I know, AES-CTR depends on nonce. If I will use same key and nonce for encrypting 1 block of data and another - it will be unsecure. So, how can I encrypt a huge block of data (about 1GB) using AES-CTR?

• Cna you exess the $2^{128}$ limit for one key – kelalaka Feb 11 '20 at 18:02
• does it mean that using ctr mode i can encrypt different blocks using same key and nonce? – veter0 Feb 11 '20 at 18:22
• You can continue encrypting new files just where you left in the counter. – kelalaka Feb 11 '20 at 18:23

So CTR-mode works as follows $$C=P\oplus E_K(N)$$ where $$P,C$$ are the plain- and ciphertext respectively and $$E_K(N)$$ is the encryption of $$N$$ under the key $$K$$ for every plaintext and ciphertext block.
Now if you were to re-use a $$(N,K)$$ pair this would indeed break security. This is why normally in CTR-mode to encrypt block $$i$$ we apply some function $$f(N,i)$$ to our nonce, for example $$f(N,i)=N+i$$ or $$f(N,i)=N\|i$$ ($$\|$$ denoting concatenation here) so we get different values for each block.
Of course you can't always maintain a global state value $$i$$ which is why for each new message $$N$$ or point where you don't to carry around $$i$$ you either derive a new $$N$$ from some contextual information (e.g. a packet counter) such that the $$f(N,i)$$ are unlikely to overlap or you choose a random $$N$$ and transmit it along.