This is great!
 
  I have finally create my function based on 
 CTR_ModePolicy::SeekToIteration function. Here it is if anyone want to use 
it:

void SeekToIteration(unsigned long long iterationCount, char * 
str_original_IV, int i_size_IV, char * str_new_IV )
{
    int carry=0;
    for (int i=i_size_IV-1; i>=0; i--)
    {
        unsigned int sum = str_original_IV[i] + byte(iterationCount) + 
carry;
        str_new_IV[i] = (byte) sum;
        carry = sum >> 8;
        iterationCount >>= 8;
    }
}


   I have a question regarding the chunk or block size I have to divide the 
whole file. Is there any recomentación about it? Is 1 KB valid? or 4KB is 
better? Or 1 MB? Or there is not any limit or better value than other?

  Thank you very much to everyone who helped!

El miércoles, 21 de octubre de 2015, 14:15:21 (UTC+2), jean-pierre.muench 
escribió:
>
> Am 21.10.2015 um 08:05 schrieb lasl...@gmail.com <javascript:>:
>
>
> OK, I see. 
> But what if I want to get the IV of 123th block? Do I have to do it 123 
> times or there is an IncrementCounterByX(byte*,unsigned int, unsignet int ) 
> function?
>
> The simplest solution is to just loop IncrementCounterByOne().
> The more advanced solution would be to use the function CTR uses for this 
> purpose (see below). You'd replace m_register[] with your input IV ad get 
> your input into m_counterArray[] (in practice you'd use two pointers here).
>
> BR
>
> JPM
>
> void CTR_ModePolicy::SeekToIteration(lword iterationCount)
>
> {
>
>     int carry=0;
>
>     for (int i=BlockSize()-1; i>=0; i--)
>
>     {
>
>         unsigned int sum = m_register[i] + byte(iterationCount) + carry;
>
>         m_counterArray[i] = (byte) sum;
>
>         carry = sum >> 8;
>
>         iterationCount >>= 8;
>
>     }
>
> }
>
>
>
> El martes, 20 de octubre de 2015, 23:11:10 (UTC+2), jean-pierre.muench 
> escribió: 
>
> Am 20.10.2015 um 19:11 schrieb lasl...@gmail.com:
>
> Hi: 
>
>         I have obviously misunderstand how the TAG works. I've been 
> playing around with code and now I have it clear. Thank you for your help.
>
>
>
>        About the concept of  "blocking" or "chunking":  my question was 
> more focused to some sample code in which, starting an IV for the first 
> block, shows me how to create the following IV incremented by one the 
> previous IV.
>
> If your problem is only the change of the IV for the next chunk there's 
> always "IncrementCounterByOne(byte*,unsigned int)" in Crypto++. You input 
> your old IV IncrementCounterByOne(IV,12) and can feed IV directly into the 
> next call to GCM.
>
> The first IV may be all-0 or some random value (AutoSeededRandomPool, 
> AutoSeededX917RNG).
>
> BR
>
> JPM
>
>
>        I'm reading the documentation and testing and thank you very much 
> for your help.
>
> Thank you very much!
>
>
> El lunes, 19 de octubre de 2015, 20:27:37 (UTC+2), jean-pierre.muench 
> escribió: 
>
> Am 19.10.2015 um 19:05 schrieb lasl...@gmail.com:
>
> Hi Jean Pierre: 
>
>    Thank you very much for your answer!
>
>    First of all: yes, I need read and write at any place in the stored 
> file. I know this is a problem.
>
>    I was reading some doc about AES-GCM, and the way you propose to work, 
> and have some doubts/observations:
>
>    - I understand that using 256bit AES, the GCM mode, and size of TAG = 
>    96 bytes (the shortest recommended) will get a resulting file, 
>    37.5% larger  than the original (regardless of the header). 
>
> I think you're getting something wrong here. The longest standard tag for 
> GCM is 16 bytes (128 bits) and the shortest standard tag is 12 bytes (96 
> bits).
>
> Some of the files we will encrypt are about 1 GB or even 2GB, so we are 
> speaking about 375MB for tags. This is correct?
>
> I don't know how you calculated those 375MB. Depending on how far you want 
> to chunk you can have 16 byte tag overhead (for the whole files, only one 
> chunk) or more if you want smaller chunks. Reasonable would be a 
> sector-size alignment, meaning Data||Tag would be as large as one sector of 
> your filesystem.  This would result in an increase of 3.2% (512-byte 
> sectors) to 0.09% (16,384-byte sectors). Or you could just use some 
> arbitrary unit like one Megabyte per chunk, resulting in a 0.0015% increase 
> in storage needed.
>
>
>    -  You say *In your scenario I'd suggest dividing the file into 
>    several subsections*: Where can I find the info about how to handle 
>    the subsection concept  for AES-GCM?
>    
> Chunking and Blocking (see Jeffrey's answer) are standard concepts. What I 
> basically suggest is to divide the file into 
> Header||Chunk1||Chunk2||Chunk3... where each Chunk has it's own tag and is 
> fully independent from the others (besides the somewhat dependent IV).
>
>
>    - As I can see here  
>    <https://groups.google.com/forum/#%21topic/cryptopp-users/UHlnZ8r-0Gc>
>    https://groups.google.com/forum/#!topic/cryptopp-users/UHlnZ8r-0Gc 
>    there is not option to seek in GCM. It´s true? 
>
> Yes, you can't seek with AES-GCM and Crypto++, because you'd skip parts of 
> the enciphered data, which you can't because the authentication would fail 
> in this case.
>
> By the way, what do you think about using XTS as shown in the link? I see 
> this option is not implemented in Crypto++...
>
> See Jeffrey's answer.
>
>
>
>    - If I want *not *to have TAG overhead I have two options AES-CTR+HMAC 
>    or AES-CBC+HMAC: 
>
> CTR would be the better option here as it can be parallelized (supports 
> seek() in Crypto++) and has less severe IV requirements.
>
>
>    - Pros: 
>          - File size will change only with header info.
>          
> You can also get constant tag size "tag overhead" with AES-GCM by only 
> using one chunk.
>
>
>    - Need to change HMAC every time file is changed.  A test to perform: 
>          how long it takes to compute HMAC of a 1GB file? 
>       
> With SHA-256, you'd roughly need 20 cycles / byte on such long messages 
> with a C implementation on an Intel Core 2 Duo [1]. Meaning you may get 
> something like 10 cycles / byte with ASM code on a modern CPU. HMAC is not 
> significantly slower than plain hashing. This would mean you'd need 10^10 
> cycles for this - or equivalently - 5 seconds on a 2GHz CPU. Reading the 
> whole file is likely to take longer.
>
> BR
>
> JPM
>
> [1]: https://www.schneier.com/skein1.3.pdf
>
>
>    - Cons:  
>    
>
>    - More slow encryption/decryption 
>       
>
> Thank you very much for your help!
>
> El domingo, 18 de octubre de 2015, 21:06:59 (UTC+2), jean-pierre.muench 
> escribió: 
>
> Am 18.10.2015 um 18:20 schrieb lasl...@gmail.com:
>
> Hi all: 
>
>    Never before have I worked in cryptography. Excuse me if the question 
> is very long but i´m very lost.
>
>    We have a new project in my company related to cryptography and would 
> appreciate you give me advice.
>
>    We have many customers who are going to save many files encrypted on 
> our servers. The files are now unencrypted. We'll encrypt files and, from 
> now on, read and change the content without completely decrypt.
>    Each file can have its own password, but we believe that most customers 
> will always use the same password.
>
>    I'm thinking about putting a header to the file, as is done in 
> <https://www.aescrypt.com/aes_>https://www.aescrypt.com/aes_file_format.html. 
> In this way we can have a new Initialization Vector ( if necessary ) for 
> each compressed file and the hash of the password. 
>
> The header format is actually looking surprisingly good. However I'd 
> suggest only using 12 byte IVs (AES-GCM only needs a 12 byte IV) and 
> replacing the header's "HMAC" with an AES-GCM tag. And I'd suggest 
> authenticating the whole unencrypted header (extensions, version, ...) with 
> the header's tag (GCM can handle associated data). 
>
>    In the header we also will keep pointers to various sections of the 
> document in which we have to read for some encrypted information and write 
> some encrypted information on the fly. For this reason I need a semi-ramdom 
> access.
>
> This actually is really tricky. Just to make sure: You need to be able 
> securely read and write at any place in the stored file?
> This will force you to re-authenticate the whole file (which can be done 
> quite fast via this trick[1]) or to pull off some other trick. In your 
> scenario I'd suggest dividing the file into several subsections. Each 
> subsection will have it's own IV which is just the IV of the previous 
> subsection incremented by one (this is safe with AES-GCM). And at the end 
> of each subsection there will be an authentication tag for said section. 
> This will give you a linear increase in size, but a linear decrease in 
> computation time as you only need to consider a specific subsection when 
> re-authenticating or verifying.
>
>
>    We have quite clear that we must use AES to encrypt files. We're not 
> sure whether to use 128bit or 256bit. There  is really too much difference 
> in safety between them (we need to consider speed) ?
>
> You need to consider two points here. a) Marketing. AES-256 with a 2^256 
> key space will sound much more impressive than AES-128 with a tiny 2^128 
> key space. b) Security period. If you want to keep the data confidential 
> for a very long time (decades?) than you want to use AES-256. Otherwise 
> AES-128 is just fine (and NSA approved for secret information) and will be 
> a bit faster.
>
>
>    And the most important question is what may be the most secure mode, 
> even assuming that an attacker could download all the files from the server?
>
> AES-GCM is the mode of choice in modern Cryptography. It is considered 
> good style to use AES-GCM and will be significantly faster than most other 
> modes (like AES-CTR+HMAC or AES-CBC+HMAC). Furthermore you may be able to 
> exploit the underlying construction to be faster by multi threading via [1].
>
> I hope this answered your questions, if there are any left you may ask 
> here or over at Crypto.SE[2] although you may not make it too broad there.
>
> BR
>
> JPM 
>
> [1]: https://crypto.stackexchange.com/a/27468/23623
> [2]: https://crypto.stackexchange.com/
>
>
>
> Thank you in advance!
> -- 
> -- 
> You received this message because you are subscribed to the "Crypto++ 
> Users" Google Group.
> To unsubscribe, send an email to cryptopp-user...@googlegroups.com.
> More information about Crypto++ and this group is available at 
> <http://www.cryptopp.com>http://www.cryptopp.com.
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Crypto++ Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to cryptopp-user...@googlegroups.com.
> For more options, visit <https://groups.google.com/d/>
> https://groups.google.com/d/optout.
>
>
> -- 
> -- 
> You received this message because you are subscribed to the "Crypto++ 
> Users" Google Group.
> To unsubscribe, send an email to cryptopp-user...@googlegroups.com.
> More information about Crypto++ and this group is available at 
> <http://www.cryptopp.com>http://www.cryptopp.com.
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Crypto++ Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to cryptopp-user...@googlegroups.com.
> For more options, visit <https://groups.google.com/d/optout>
> https://groups.google.com/d/optout.
>
>
> -- 
> -- 
> You received this message because you are subscribed to the "Crypto++ 
> Users" Google Group.
> To unsubscribe, send an email to cryptopp-user...@googlegroups.com.
> More information about Crypto++ and this group is available at 
> http://www.cryptopp.com.
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Crypto++ Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to cryptopp-user...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>
>
> -- 
> -- 
> You received this message because you are subscribed to the "Crypto++ 
> Users" Google Group.
> To unsubscribe, send an email to cryptopp-user...@googlegroups.com 
> <javascript:>.
> More information about Crypto++ and this group is available at 
> <http://www.cryptopp.com>http://www.cryptopp.com.
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Crypto++ Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to cryptopp-user...@googlegroups.com <javascript:>.
> For more o
>
> ...

-- 
-- 
You received this message because you are subscribed to the "Crypto++ Users" 
Google Group.
To unsubscribe, send an email to cryptopp-users-unsubscr...@googlegroups.com.
More information about Crypto++ and this group is available at 
http://www.cryptopp.com.
--- 
You received this message because you are subscribed to the Google Groups 
"Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to cryptopp-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to