#1
  1. No Profile Picture
    Contributing User
    Devshed Newbie (0 - 499 posts)

    Join Date
    Jul 2011
    Posts
    51
    Rep Power
    55

    How to use an Linear Congruential Generator for cryptographic Purpose


    Hi,

    today I'm publishing the improved Version of my former Idea on how to using an Linear Congruential Generator for cryptographic Purposes


    Here the basic Principle again:


    The main Functions of my new Encryption Algorithm (SEA1m5 ) consisting in the following parts


    1) A modified use of a regular Linear Congruential Generator (mLCG) feeding now with one Seed and 3 every-time changing Values for the Constants (A, C, M) for every single Encryption, instead of normally using one Seed and three fixed Constants. Long-term Test of the modified LCG (mLCG) showing a very resonable discrete Uniform Distribution of random Numbers.

    Similar to:
    * http://en.wikipedia.org/wiki/Linear_congruential_generator



    2) A simple Hash-Function using MD5-Checksums which are re-hashed over several Rounds as a Key stretching Function.

    Similar to:
    * http://en.wikipedia.org/wiki/Key_strengthening



    3) A Password-Based Random Initialisation Vector Function (PRND_IV) used to create the 4 IV (X, A, C, M) for the modified LCG (mLCG), which are in fact nearly similar to "Numbers used once". This function (PRND_IV) will generate the 4 IV (X, A, C, M) out of a random ASCII-String and the Password. Both represented by re-hashed MD5-Checksum‘s (MD5CHF) which are XOR enciphered, than split up in Numbers of certain length to initialise the Values X, A, C and M for the modified LCG (mLCG).



    4) The random String, from which the 4 IV (X, A, C, M) are derived, will be XOR encrypted with the salted Password and placed in Front of every encrypted Message. This way we can secretly submit all 4 IV (X, A, C, M) for the modified LCG (mLCG) and the Message can be deciphered, if the receiver has Knowledge of the Password.


    Now just a short Description of the enciphering and deciphering Steps:

    '# Encipher Steps (short Description)'
    (** Please find the corresponding Number in the JavaScript-Listing.)


    (** e1)
    //
    Generate a random ASCII-String, build it‘s MD5-Checksum and pick some Values of it as Password-Salt

    (** e2)
    //
    Generate a random ASCII-String as the Basis for the Password-Based Random Initialisation Vector Function. (PRND_IV)

    (** e3)
    //
    Derive the 4 IV (Values X, A, C, M) from this random ASCII-String using the Password-Based Random Initialisation Vector Function (PRND_IV). This will put the modified LCG (mLCG) into it‘s internal State for creating the Key-Stream.

    (** e4)
    //
    XOR Encipher the HEX-String of Random-IV with the MD5-based Chained Hash (MD5CHF) of the salted Password. The Result will be the Secret-IV.

    (** e5)
    //
    Prepare the Message-Header containing a Marker for the used Version of the Encryption Algorithm, the Value for the MD5-Based Chained Hash Rounds, the HEX-Value of the Password-Salt and finally the HEX-Value of the Secret-IV.

    (** e6)
    //
    Perform the XOR-Encryption of the Data-Stream with the Key-Stream using the formerly under (** e3) created 4 IV (Values X, A, C, M) with the modified LCG (mLCG) until the End of the Data-Stream has been reached.

    (** e7)
    //
    In this JavaScript-Implementation, as we Encipher just a Text, the Message-Header will be placed in Front of the enciphered Message. When using the Encryption Algorithm on binary Data or a Communication-Stream the Message-Header of course needs to be written or send before the actual enciphered Data.



    ###

    '# Decipher Steps (short Description)'

    (** Please find the corresponding Number in the JavaScript-Listing.)


    (** d1)
    //
    Check if the enciphered Message has the proper Version, extract the Value for the MD5-Based Chained Hash Rounds and the HEX-Value of the Password-Salt.

    (** d2)
    //
    XOR Decipher the HEX-String of the Secret-IV from the Beginning of the enciphered Message, using the MD5-based Chained Hash (MD5CHF) of the salted Password. The Result will be the Random-IV from which the 4 IV (Values X, A, C, M) will be derived.

    (** d3)
    //
    Now re-generate the 4 IV (Values for X, A, C, M) out of the Random-IV using a Password-Based Random Initialisation Vector Function (PRND_IV). This will put the modified LCG (mLCG) into it‘s internal State for creating the Key-Stream for Deciphering the Data-Stream.

    (** d4)
    //
    Perform the XOR-Decryption of the Cipher-Stream with the Key-Stream using the formerly under (** d3) re-created 4 IV (Values X, A, C, M) with the modified LCG (mLCG) until the End of the Cipher-Stream has been reached and regain the Data-Stream.


    A full functional Example of the Encryption Algorithm (SEA1m5) including Source-Code in JavaScript is available here

    JavaScript Example

    Cheers,
    Karl-Uwe




    //######################################################################
    //
    // Copyright (c) 2011, Karl-Uwe Frank
    //
    // This Software and it‘s Encryption Algorithm (SEA1m5) is released
    // under the Non-Profit Open Software License 3.0 (NPOSL-3.0)
    // http://www.opensource.org/licenses/NOSL3.0
    //
    // This Code and the Encryption Algorithm (SEA1m5) can be used freely
    // for all personal, academic or non-commercial purposes.
    //
    // For commercial purposes please contact karl.frank [a T] freecx.co.uk
    //
    //######################################################################
    Last edited by Karl-Uwe Frank; September 6th, 2011 at 04:27 PM. Reason: Ohh just some more typo :-(

IMN logo majestic logo threadwatch logo seochat tools logo