Patent Publication Number: US-8542832-B2

Title: System and method for the calculation of a polynomial-based hash function and the erindale-plus hashing algorithm

Description:
FIELD OF INVENTION 
     The present invention relates to a polynomial-based hash function and an ERINDALE-PLUS hashing algorithm to achieve optimum processing speed and enhanced security. 
     BACKGROUND OF THE INVENTION 
     Hash and Message Authentication Code (or MAC) algorithms are extremely important and, at the same time, the most vulnerable components of network security. These algorithms are used to provide a hash or MAC value that can serve as authentication of the integrity of a message that they have been appended to. A recipient user can perform the same hash or MAC operation on the received data to obtain a hash or MAC value and to compare it with appended value in order to verify that the data has not been modified in transit. It should be noted that because hash and MAC algorithms produce tags of a fixed size for inputs of all lengths, the mapping is a many-to-one mapping, which results in “hash collisions”. Hash collisions result when two different messages have the same hash or MAC value. The design of the algorithms is intended to generate widely divergent hash or MAC values for slightly different inputs which provide an ease of recognizing of message alteration. 
     A typical secure hash function is generally referred to as an iterated hash function and is based on a proposal by Merkle (R. C. Merkle, Authentication and Public Key systems, Ph. D. Thesis, Stanford University, June 1979, and R. C. Merkle, One way hash functions and DES, in: Advances in Cryptology—Crypto &#39;89, ed. Brassard, pp. 428-446, Lecture Notes in Computer Science 435, Springer-Verlag, 1990). According to Merkle&#39;s proposal, the hash function takes an input string of bits and partitions the string into fixed-sized blocks of size k. Then a compression function takes k bits of the i th  partition and m bits from the previous calculation and calculates m bits of the (i+1) st  iteration. The output value of the last iteration (of size m) is the hash value. One common hash function is Message-Digest algorithm 5 (MD5) which generates 128-bit hash values. Flaws were identified in the MD5 algorithm in 1996, leading many organizations to suggest that MD5 may not be relied upon as secure. 
     The secure hash function SHA was designed by the National Security Agency (NSA) and issued by the National Institute of Standards and Technology (NIST) in 1993 as a Federal Information Standard (FIPS-180). A revised version called SHA-1, which specifies an additional round to the message expansion, was later issued in 1995 as FIPS-180-1. Further revisions to the SHA family of algorithms include SHA-224, SHA-256, SHA-384, and SHA-512 which are occasionally collectively referred to as SHA-2. 
     SHA-1 produces a 160-bit hash. That is, every message hashes down to a 160-bit string. Given that there are an infinite number of messages that hash to each possible value, there are an infinite number of possible collisions. But because the number of possible hashes is so large, the odds of finding a collision by chance is small (one in 2 80  to be exact). Thus, using the brute-force method of finding collisions, the success of the attack depends solely on the length of the hash value. 
     In 2005 Prof. Xiaoyung Wang announced an attack on the NIST SHA-1 hash function and discovered that SHA-1 can be broken. In the same year she created a collision for the MD5 hash function. Prof. Wang&#39;s work revealed the vulnerabilities of the two hash functions most widely utilized by industries today. This revelation compelled the NIST to take steps to transition rapidly to the stronger SHA-2 family of hash functions. 
     By the recommendation of NIST, SHA-1 has been replaced by SHA-256, SHA-384, and SHA-512 (Secure Hash Signature Standard (SHS) (FIPS PUB 180-2)). However, as the algorithms SHA-1, SHA-256, SHA-384, and SHA-512 have common constructions, the same attack that has already been used in the case of SHA-1, can be applied to SHA-256, SHA-384, and SHA-512. Furthermore, there is no guarantee that the attack will not be further enhanced. Hence, all the systems of the SHA family may eventually be compromised. 
     When a MAC or hashing algorithm is compromised, the conventional recommendation is to abandon the algorithm and move to a more secure algorithm. This requires that electronic infrastructure used to generate the hash or MAC values be updated, which involves moving a large installed base to another system. For obvious reasons, including user inertia, this is a difficult task. Thus, there is a need for methods, computer programs and computer systems that, while utilizing hash and MAC algorithms (such as the MAC algorithms of the SHA family), are operable to provide an improved level of security. There is a further need for the methods, computer programs and computer systems that meet the aforesaid criteria and are further easy to implement to existing technologies and are computationally feasible. 
     Canadian Patent Application No. 2,546,148 disclose a secure hashing method consisting of: (1) representing an initial sequence of bits as a specially constructed set of polynomials as described herein, (2) transformation of this set by masking, (3) partitioning the transformed set of polynomials into a plurality of classes, (4) forming the bit string during the partitioning, (5) for each of the plurality of classes, factoring each of the polynomials and, so as to define a set of irreducible polynomials, collecting these factors in registers defined for each of the plurality of classes, (6) wrapping the values of the registers from the plurality of classes by means of an enumeration, (7) organizing the enumerations and the bit strings into a knapsack, and, finally, (8) performing an exponentiation in a group to obtain the hash value or the MAC value. 
     Because of the polynomial representation and masking transformation, in order to create a collision in accordance with the secure hash function described above, an attacker would be required to solve a collection of systems of non-linear iterated exponential equations over a finite field having specific constraints. In the case of a MAC, this difficulty is combined with the difficulty of opening the knapsack, and the difficulty of solving (a) the elliptic curve discrete logarithm referred to below, or (b) the discrete logarithm problem in the finite group, which further contributes to the security of the method of the present invention. As a result of the structure of the procedure, the resulting hash or MAC value has the following important attributes:
         a) the length of the output can be changed simply by changing the final step;   b) the computation is a bit-stream procedure as opposed to a block procedure;   c) creating a collision requires the solution to several difficult mathematical problems; and   d) varying some parameters (the number of the bit strings, or the length of the bit strings, for example) allows easy variation of the difficulty of creating a collision.       

     SUMMARY OF THE INVENTION 
     In one aspect the invention is a system directed at hash functions capable of averting attacks upon messages characterized in that it comprises: at least one computer; a message sent by a sender by way of the at least one computer; one or more polynomial-based hashing functions being operable by the at least one computer for application to the message to produce a hash output, utilizing one or more of the following elements: a splitting with jumping function; a masking function; a bit string generation function; and a padding function; one or more processing functions operable to generate an output that averts attacks upon the message; and wherein attacks upon the security of the message are averted through the application of the one or more polynomial-based hash functions and the one or more processing functions to the message. 
     In another aspect the invention is a method of application of a polynomial-based hash function to a message sent by a user from a computer, characterized in that it comprises the following steps: calculating a hash output utilizing the polynomial-based hash function by one or more of the following steps: applying a splitting with jumping function to the message to generate splitting with jumping outputs; applying a masking function to the splitting with jumping outputs to generate masking outputs; applying a bit string generation function to the masking outputs to generate bit strings outputs; and applying a padding function to the bit strings outputs to generate padding outputs; processing the padding outputs by one or more processing functions operable to generate a set of polynomials; performing the incorporation of the set of polynomials with the message to generate an output that averts attacks upon the security of the message. 
     In yet another aspect the invention is a computer system characterized in that it comprises software to program existing computer hardware to: receive a message sent by a sender; apply one or more polynomial-based hashing functions to the message to produce a hash output, utilizing one or more of the following elements: a splitting with jumping function; a masking function; a bit string generation function; and a padding function; process the hash output by one or more processing functions operable to generate an output that averts attacks upon the security of the message. 
     In still another aspect the invention is polynomial-based hash function operable by way of a computer program including computer instructions operable to averting attacks upon a message sent by a sender characterized in that it comprises: one or more of the following elements to produce a hash output, each facilitating a parameterized inner structure: a splitting with jumping function; a masking function; a bit string generation function; and a padding function; one or more processing functions operable to generate an output that averts attacks upon the security of the message. 
     In this respect, before explaining at least one embodiment of the invention in detail, it is to be understood that the invention is not limited in its application to the details of construction and to the arrangements of the components set forth in the following description or illustrated in the drawings. The invention is capable of other embodiments and of being practiced and carried out in various ways. Also, it is to be understood that the phraseology and terminology employed herein are for the purpose of description and should not be regarded as limiting. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
       The invention will be better understood and objects of the invention will become apparent when consideration is given to the following detailed description thereof. Such description makes reference to the annexed drawings wherein: 
         FIG. 1  is a flow chart of the hashing algorithm of the present invention. 
         FIG. 2  is a flow chart of the digital signature scheme of the present invention. 
     
    
    
     In the drawings, one embodiment of the invention is illustrated by way of example. It is to be expressly understood that the description and drawings are only for the purpose of illustration and as an aid to understanding, and are not intended as a definition of the limits of the invention. 
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT 
     The present invention is a polynomial-based hash function involving an ERINDALE-PLUS hashing algorithm. The invention may provide a secure means of transferring a message capable of functioning at a significant speed. The function can involve several elements, including splitting with jumping, masking and bit string generation which generally involves representing an initial sequence of bits as a specially constructed set of polynomials. The means of achieving the function involves methods that achieve improved speeds, such as requirements related to the size of the bit strings to cause the bit strings to be compatible with splitting and jumping and to involve iterated masking of a degree greater than 0. Additionally the function involves recursive padding methods and a construction of MAC for considered hash function. A paradigm of generating a lot of polynomial based hash functions with different inner structure, which was named the customization of the hash function is further applied. Hash values (or secure hash values) of the messages processed by way of the present invention are protected and less prone to attack. 
     MAC construction is generally applied for secure hashing, namely hashing that involves a key. The present invention may provide a method of secure hashing that does not apply a MAC construction. In the present invention, the parameter that sets certain structures of the hashing algorithms can be used as a key. This is described below in reference to the ERINDALE and ERINDALE-PLUS hash algorithms. Such algorithms incorporate changeable or parameterized inner structures. 
     The present invention involves a method of processing the whole of a message file which results in faster and more secure processing. In particular, this processing involves procedures of splitting with jumping, masking, and bit string and table creation that are more powerful than those applied in the prior art. The present invention may provide a benefit over the prior art in that although a splitting step is known in the prior art, the present invention applies a splitting with jumping procedure. 
     The present invention offers additional benefits over the prior art as well. When a MAC or hashing algorithm is compromised, the conventional prior art recommendation is to abandon the algorithm and move to a more secure algorithm. This requires that the electronic infrastructure being used for generation of the hash or MAC values to be updated. This can involves moving a large installed base to another system with the larger size of a hash or MAC value. For several reasons, such as, for example user inertia, this is a difficult task. The present invention provides a method, computer program and system that may be operable to provide an improved level of security for any size of a hash value while utilizing hash and MAC (secure hashing) algorithms. Additionally, the present invention may be easily implemented to existing technologies and computationally feasible. 
     Another benefit of the present invention over the prior art is that it may construct one hashing algorithm with a changeable inner structure. When a hashing scheme becomes vulnerable it may be necessary to alter the algorithm. The present invention offers the possibility to enhance the security of the algorithm by changing certain parameters. The prior art does not provide this option. The present invention may facilitate enhancement of the inner structure of the algorithm and the result obtained may be a new more secure variant of the hash function. In such an embodiment of the present invention it may not be necessary to construct a new algorithm. Both the ERINDALE algorithm and ERINDALE-PLUS algorithm presented in this application facilitate such security enhancing by means of changing or enriching the structure of the algorithms applied by the present invention. 
     Using masking and iterated masking construction in ERINDALE and ERINDALE-PLUS hashing algorithms may force an adversary to solve a system of iterated exponential equations over finite fields in order to create a collision. The level of complexity of finding a solution to the system of the equations may create difficulties that an attacker cannot overcome. Layering of the bit strings of the present invention, which may incorporate multiple layers rather than the two layers of the prior art, can create further difficulties for attackers. Each layer and dimension of the bit string procedure adds to the overall security of the present invention. 
     Prior art examples can be characterized as having a limited and narrow application to specific applications. The present invention may have a wider and more general application. 
     In one embodiment of the present invention, due to the specific procedures of splitting with jumping, masking and bit string and table creation utilized by the present invention to process the whole of a message file, elements of the hashing function may be tailored. For example, the polynomial-based hashing algorithm applied may be the ERINDALE-PLUS hashing algorithm which is applied to function in accordance with the present invention method. 
     The present invention offers further benefits over the prior art in that it is convenient for hardware implementation. The ERINDALE-PLUS algorithm may be parameterized more effectively than algorithms of the prior art. Additionally, the ERINDALE-PLUS algorithm may not require as much memory as the algorithms applied in the prior art. 
     Dedicated hardware elements, including custom Application Specific Integrated Circuits (ASIC) and digital signal processors (DSP), can be used in the implementation of the present invention. Alternatively, a general purpose computer can be programmed to execute the methods of the present invention. 
     Embodiments of the present invention may include the hashing algorithm, as shown in  FIG. 1 , or the digital signature scheme, as shown in  FIG. 2 . These are detailed below. However, a skilled reader reader will recognize that embodiments of the present invention may include variations of these steps. 
     Multiple Splitting with Jumping 
     In one embodiment of the present invention a method of splitting a file into a collection of polynomials of certain degree may be undertaken. The splitting implemented may allow for a variation in the speed of the algorithm function. 
     Prior art methods of splitting may be referred to as 0-jumping splitting because there is no gap between any two neighboring elements in the direct or forward splitting. 
     In an embodiment of the present invention the splitting procedure may be as follows: A number may be fixed, such as n. The splitting described herein will be referenced as q-jumping splitting for any 0&lt;q&lt;n. The description will be restricted to direct q-splitting however, the construction for backward q-splitting is analogous to this procedure. 
     To perform a jumping with 2-jumping splitting we construct:
 
 M (1, n ), M (3, n+ 2), M (5, n+ 4), M (7, n+ 6), M (9, n+ 8), . . . ,  (1)
 
     Note that for q=2 the above collection can be written as follows
 
 M (1 ,n ), M (1 +q,n +( q )), M (1+2 q,n+ 2( q )), M (1+3 q,n+ 3( q )), M (1+4 q,n+ 4( q )), . . .   (2)
 
     A general construction for any 0&lt;q&lt;n may be applied through the construction of the following collection:
 
 M (1 ,n ), M (1 +q,n +( q )), M (1+2 q,n+ 2( q )), M (1+3 q,n+ 3( q )), . . .   (3)
 
     Splitting with jumping may then be defined as the collection of elements
 
 M (1 +q   1   ,n+q   1 ), M (1 +q   1   +q   2   ,n +( q   1   +q   2 )), M (1 +q   1   +q   2   +q   3   ,n +( q   1   +q   2   +q   3 )), . . . ,  (4)
 
where 0≧q i &lt;n and the numbers q i  are defined in accordance with certain algorithms. Two groups of such algorithms may be Group 1 or Group 2 described below. A skilled reader will recognize that other algorithms may be applied.
 
Group I
 
     In one embodiment of the present invention an algorithm for forming q i  where q i  may depend on just one or a few elements M(j, j+n−1) for j≦i, i=1, . . . , k. 
     In general, a mapping
 
φ:{0,1, . . . ,2 n −1}→{0,1 , . . . ,n− 1}  (5)
 
may be formed and set
 
 q   i =φ(ψ d ( M ( j   1   ,j   1   +n− 1), M ( j   2   ,j   2   +n− 1), . . . , M ( j   l′   ,j   l   +n− 1))),
 
where ψ d , in turn is an d-placed function
 
ψ d :{0,1, . . . ,2 n −1}× . . . ×{0,1, . . . ,2 n −1}→{0,1, . . . ,2 n −1},  (6)
 
where 0&lt;d&lt;i.
 
     For instance, it is possible to set q 1 =0 and
 
 q   i   =int ( M ( i,i+n− 1)mod  n,  
 
i&gt;0, or
 
 q   i   =int ( M ( i− 1, i+n− 2)⊕ M ( i− 2, i+n− 3)⊕ . . . ⊕ M ( i−d,i−d+n− 1))mod  n   (8)
 
for the corresponding i&gt;d&gt;1.
 
Group II
 
     In another embodiment of the present invention the second group may consist of algorithms for forming q i , in a framework in which q i  may depend either on one or a few elements M(j, j+n−1), and possibly one or a few elements CUR j , where j≦i, i=1, . . . , k. Separately, it is possible to consider the situation when q i  depends on just one or a few elements CUR j  for j≦i, i=1, . . . , k. 
     Examples of realizing the function ψ d  in this case for different d&gt;1 are provided. 
     Setting q 1 =0 and
 
 q   i =# 1 ( M ( i− 1 ,i+n− 2)),
 
where i&gt;0, # 1  (M(i−1, i+n−2) denotes the number of 1-s in a sequence M(i−1, i+n−2) is one such example. In another example it is possible to set q i =0 for i&lt;d and then calculate
 
ω i   d   =M ( i− 1,i+n−2)⊕ CUR   i−2   ⊕CUR   i−3   (*) ⊕⊕CUR (i−4)   (**)   ⊕ . . . ⊕CUR   i−d+2)     j     (*, . . . ,*)  
 
where CUR i−3   (*) , CUR i−4   (**) , . . . , CUR i−d+2   (*, . . . ,*)  are the elements of the iterated masking of the corresponding degrees. In general, any function defined on the collection of elements
 
 M ( i− 1 ,i+n− 2), CUR   i−2   ,CUR   i−3   (*)   ,CUR   i−4   (**)   , . . . ,CUR   (i−d+2)   (*, . . . ,*)  
 
or some subsets of the collection can be considered. Note that the last element is of degree d.
 
     Then using a mapping
 
φ:{0,1, . . . ,2 n −1}→{0,1 , . . . ,n}   (9)
 
it is possible to obtain
 
 q   i =φ( int (ω i ))
 
for i=l+1, . . . , k.
 
     In embodiments of the present invention, by choosing different mappings φ, it may be possible to change the processing speed for a message M. Indeed, assume that n=4 and consider two tables, by means of which we define two mappings, say φ 1  and φ 2 . 
     
       
         
           
               
             
               
                 TABLE 1 
               
               
                   
               
               
                 Function φ 1 . 
               
               
                   
               
             
            
               
                   
               
            
           
           
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
            
               
                 x: 
                 0 
                 1 
                 2 
                 3 
                 4 
                 5 
                 6 
                 7 
                 8 
                 9 
                 10 
                 11 
                 12 
                 13 
                 14 
                 15 
               
               
                 φ 1 : 
                 1 
                 0 
                 1 
                 0 
                 2 
                 1 
                 3 
                 2 
                 1 
                 0 
                  2 
                  1 
                  3 
                  1 
                  0 
                  2 
               
               
                   
               
            
           
         
       
     
     
       
         
           
               
             
               
                 TABLE 2 
               
               
                   
               
               
                 Function φ 2 . 
               
               
                   
               
             
            
               
                   
               
            
           
           
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
               
            
               
                 x: 
                 0 
                 1 
                 2 
                 3 
                 4 
                 5 
                 6 
                 7 
                 8 
                 9 
                 10  
                 11 
                 12  
                 13 
                 14 
                 15 
               
               
                 φ 2 : 
                 2 
                 3 
                 1 
                 2 
                 3 
                 0 
                 1 
                 3 
                 2 
                 3 
                  2 
                  1 
                  2 
                  3 
                  2 
                  3 
               
               
                   
               
            
           
         
       
     
     The value may be defined as 
               ds   ⁡     (     φ   ,   n     )       =       1   /     2   n       ⁢       ∑     x   =   0         2   n     -   1       ⁢     φ   ⁡     (   x   )                 
which may be called the jumping bit distance of a mapping φ. Thus,
     ds(φ 1 , 4)=1.25, while   ds(φ 2 , 4)=2.065.   

     The larger the jumping bit distance, the faster it may process a message, since the number of elements processed during splitting with the mapping φ is, on average equal to k/ds(φ, n). 
     Thus, by varying n and φ, it is possible to change the speed of the splitting procedure and therefore the speed of the function. However, by increasing the jumping bit distance, we do not process a message as “thoroughly” as we would with a smaller jumping bit distance. The best way of defining a mapping φ is to construct a random sequence of 2 n  elements {x, . . . , x 2     n   }, where 0≦x 1 &lt;n−1, i=1, . . . , 2 n . 
     Iterated Masking Construction 
     Requirements for Using Fields and Generators 
     In one embodiment of the present invention a construction of the iterated masking and specific requirements to the generators and the corresponding fields that are used in the construction, sufficiently improve the security of the function, as the relation between M i  and CUR i  become difficult to examine. 
     In one embodiment of the present invention, a first step of construction may be to calculate CUR n     j    using generators δ and β of the corresponding fields GF 1 (2 n     j   ) and GF 2 (2 n     j   ). The fields GF 1 (2 n     j   ) and GF 2 (2 n     j   ) are generated in a standard way based on generators δ and β modulo different irreducible polynomials f and g of degree respectively. After calculating CUR i   n     j   , it may be possible to compute CUR i   n     j*    for i=1, . . . , k using the same generators δ and β. 
     When calculating the sequence CUR i   n     j*    based on the sequence CUR n     j   , generators δ 1  and β 1  which are different from δ and β may be used. Moreover, in this case, irreducible polynomials f 1 ≠f and g 1 ≠g may be applied for generating the corresponding fields. 
     Moreover, calculating the iterated masking of degree, say, m, may use generators δ m  and β m  that are different from the previously-indexed generators δ m-1  and β m-1  that were applied for computing the polynomials of the iterated masking of degree m−1. 
     It is possible to further assume that f m-1  and g m-1  are the irreducible polynomials of degree n j  from which the fields GF 1 (2 n     j   ) m-1  and GF 2  (2 n     j   ) m-1  may be generated with generators δ m-1  and β m-1 , correspondingly. 
     Calculating the elements of the iterated masking of degree m, may use the fields GF 1 (2 n     j   ) m  and GF 2 (2 n     j   ) m  that are generated, respectively, modulo irreducible polynomials f m  and g m  of degree n j  such that f m ≠f m-1  and g m ≠g m-1 . 
     All generators δ, δ 1 , . . . , δ m  and β, β 1 , . . . , β m  may be irreducible. 
     CUR Calculation I 
     In one embodiment of the present invention the multiple masking procedure overcomes the prior art in that it alters the formula for calculating the sequences CUR n     j   , j=1, . . . , c. 
     In one embodiment of the present invention, the formula for calculating the elements of CUR may begin with the fixing of some n j , omit the upper index n j  for CUR n     j   , and simply write CUR. 
     It is possible to apply the CUR expression for i=1, . . . , 2 n +1, however, the formula for the calculation of elements of CUR for i≦2 n +2 should consider any p 1 (i), p 2 (i) such that 1&lt;p 1 (i)≦2 n  and 1&lt;p 2 (i)≦2 n . We have 
                 CUR   i     =       M   i     ⊕       ϕ   f     (     δ     (       int   ⁡     (     M     i   -   1       )       +       int   ⁡     (     CUR     d   1   0       )       ⁢   mod   ⁢           ⁢     2   n         )       )     ⊕       ϕ   g     (     β     (       int   ⁡     (     CUR     i   -   1       )       +       int   ⁡     (     CUR     d   2   0       )       ⁢   mod   ⁢           ⁢     2   n         )       )         ,         
where
 
 d   1   0   =d   1   0 ( i )= i− 2−( int ( M   i−1 )mod  p   1 ( i ),
 
 d   2   0   =d   2   0 ( i )= i− 2−( int ( CUR   i−1 )mod  p   2 ( i ).  (10)
 
     In particular, p 1 (i) may be equal to p 1 (j) and p 2 (i) may be equal to p 2 (j) for i, j≧2 n +2 and i≠j. 
     It is possible to define p 1 (i) and p 2 (i) in different ways for i≧2 n +2. 
     For instance, assume that the iterated masking of degree 1 is constructed. In this case, using the indexation for the corresponding iterated degree, for CUR 0  and for i≧2 n +2 it is possible to set
 
 p   1   0 ( i )= int ( CUR*   i−2−d     3       0     (i) ), p   2   0 ( i )= int ( CUR*   i−2−d     3       1     (i) )
 
if int(CUR* i−2−d     3       0     (i) ) and int(CUR* i−2−d     3       0   ) are different from 0 and 1. Otherwise, it is possible to set
 
 p   1   0 ( i )= c   1   ,p   2   0 ( i )= c   2 ,
 
where c 1  and c 2  are some constants. For instance, we may set c 1 =c 2 =2 n −1.
 
     It is also possible to define d 3   0  (i), d 3   1 (i) in different ways. For example, we may also set
 
 d   3   0 ( i )= int ( CUR   i−t     1       0     0 ), d   3   0 ( i )= int ( CUR   i−t     2       0     0 )),
 
where 2≦t 1   0 ≦2 n −1, 2≦t 2   0 ≦2 n −1 are some constants, or it is possible to consider
 
 t   1   0   =int ( CUR*   i−2 ), t   2   0   =int ( CUR*   i−3 ).
 
For the case of iterated degree 1 we have
 
                 CUR   i   *     =       CUR   i   0     ⊕       ϕ     f   1       (     δ     (       int   ⁡     (     CUR     i   -   1     0     )       +       int   ⁡     (     CUR     d   1   1     *     )       ⁢   mod   ⁢           ⁢     2   n         )       )     ⊕       ϕ     g   1       (     β     (       int   ⁡     (     CUR     i   -   1     *     )       +       int   ⁡     (     CUR     d   2   1     *     )       ⁢   mod   ⁢           ⁢     2   n         )       )         ,         
where
 
 d   1   1   =d   1   2 ( i )= i− 2−( int ( CUR   i−1   0 )mod  p   1   0 ( i ),
 
 d   2   1   =d   2   1 ( i )= i− 2−( int ( CUR*   i−1 )mod  p   2   0 ( i ).  (11)
 
     It is possible to compute p 1   1 (i) and p 2   1 (i) by
 
 p   1   1 ( i )= int ( CUR*   i−2−d     3       2     (i) ), p   2   1 ( i )= int ( CUR*   i−2−d     3       3     (i) ),
 
where d 3   2 (i)=int (CUR i−t     1       1     0 ), d 3   3 (i)=int(CUR i−t     2       1     0 ), and in this case we may compute
 
 t   1   1   =int ( CUR   i−2   0 ), t   2   1   =int ( CUR   i−3   0 ),
 
for i=2 n +2, . . . , k, or t 1   1 , t 2   1  are some constants such that
 
2≦ t   1   1 ≦2 n −1,2≦ t   2   1 ≦2 n −1.
 
     In a more simplified situation, d 3   l(*) (i)=s(l(*)), where s(l(*)) is some constant different for different l(*). The construction considered above can be expanded on the iterated masking procedure of any degree. 
     CUR Calculation II 
     In yet another embodiment of the present invention a CUR calculation may be achieved involving various elements of CUR of the iterated masking of non-zero degree. It is possible to fix n and assume that iterated masking of degree l&gt;0 is performed. 
     Assume that the condition
 
 l+ 1&lt;φ(2 n −1),
 
takes place, that is, the number of the generators greater or equal to l+2, where φ(x) is the Euler&#39;s totient function.
 
     It is then possible to consider generators δ 0 , δ 1 , . . . , δ l  of the field GF (2 n ). It is not necessary to change the expression for CUR i  calculation for i=1, . . . , 2 n +1, however the formula will be different for i&gt;2 n +1. 
     It is possible to set
 
 CUR   i   =M   i ⊕(δ 0   0 ) (int(M     i−1     )+int(CUR     d       0     )mod2     n)   ⊕(δ 1   0 ) (int(CUR     i−2     )+int(CUR     d       1     )mod2     n     ) ⊕
 
⊕(δ 2   0 )( int ( CUR*   i−1   )+int(CUR     d       3     )mod2     n)   ⊕(δ 3   0 ) (int(CUR**     i−3     )+int(CUR     d       4     )mod2     n)   ⊕
 
. . .
 
⊕(δ 1+1   0 ) (int(CUR     i−l−1       l     )+int(CUR     d       l+1     )mod2     n     ) ,  (12)
 
where
 
 d   0   =i− 2 −int ( M   i−1 ),
 
 d   1   =i− 2 −int ( CUR   i−1 ),
 
 d   2   =i− 2 −int ( CUR*   i−2 ),
 
 d   3   =i− 2 −int ( CUR**   i−3 ),
 
. . .
 
 d   i+1   =i− 2 −int ( CUR   i−l−1   l ),
 
CUR i−l−1   l  may be the (i−l−1)-th element of the iterated masking sequence of degree l and the expressions for the elements from CUR*, CUR**, . . . , CUR l  may be presented.
 
     Again, the formula for calculating, for instance, CUR* i  for i=1, . . . , 2 n +1 may be the same as it was presented in prior art Canadian Patent No. 2,546,148. 
     Here is another way of forming CUR. For i=2 n +2, . . . , k it is possible to set 
                       CUR   i   *     =       CUR   i     ⊕       (     δ   0   1     )       (       int   ⁡     (     CUR     i   -   1       )       +       int   ⁡     (     CUR     d   0     *     )       ⁢   mod   ⁢           ⁢     2   n         )       ⊕       (     δ   1   1     )       (       int   ⁡     (     CUR     i   -   1     *     )       +       int   ⁡     (     CUR     d   1     *     )       ⁢   mod   ⁢           ⁢     2   n         )       ⊕       (     δ   2   1     )       (       int   ⁡     (     CUR     i   -   2     **     )       +       int   ⁡     (     CUR     d   2     *     )       ⁢   mod   ⁢           ⁢     2   n         )       ⊕       (     δ   3   1     )       (       int   ⁡     (     CUR     i   -   3       **   *       )       +       int   ⁡     (     CUR     d   3     *     )       ⁢   mod   ⁢           ⁢     2   n         )       ⊕       (     δ   l   1     )       (       int   ⁡     (     CUR     i   -   1     l     )       +       int   ⁡     (     CUR     d   1     *     )       ⁢   mod   ⁢           ⁢     2   n         )           ,           (   13   )               
where
 
 d   0   =i− 2 −int ( CUR   i−1 ),
 
 d   1   =i− 2 −int ( CUR*   i−1 ),
 
 d   2   =i− 2 −int ( CUR**   i−2 ),
 
 d   3   =i− 2 −int ( CUR***   i−3 ),
 
. . .
 
 d   l   =i− 2 −int ( CUR   i−1   l ),
 
     Eventually for i=2 n +2, . . . , k it is possible to set 
                     CUR   i   l     =       CUR   i     l   -   1       ⊕       (     δ   0   l     )       (       int   ⁡     (     CUR     i   -   1       l   -   1       )       +       int   ⁡     (     CUR     d   0   l     l     )       ⁢   mod   ⁢           ⁢     2   n         )       ⊕       (     δ   1   l     )       (       int   ⁡     (     CUR     i   -   1     l     )       +       int   ⁡     (     CUR     d   1   l     l     )       ⁢   mod   ⁢           ⁢     2   n                       (   14   )               
where
 
 d   0   l   =i− 2 −int ( CUR   i−1   l−1 ),
 
 d   1   l   =i− 2 −int ( CUR   i−1   l ),
 
     By CUR i−1   l−1  and CUR i−1   l  the i−1 elements of the sequences of degrees l−1 and l, correspondingly may be denoted. 
     Various constructions of CUR may be considered together with the modification presented above in “The modification of CUR calculation I” subsection. It is possible to consider the corresponding collections of p i  in this case. 
     It is also possible to vary the generators and the fields generated by modulo different irreducible polynomials for CUR of different degrees. 
     It means that δ i   0  are generators of field constructed modulo irreducible polynomial f, which is different from irreducible polynomial, say g modulo of which field GF(2 n ) was built when generators δ i   1  were used and so forth. 
     If condition l+1&lt;φ(2 n −1) is not valid, it is possible to have totally φ(2 n −1)IR(n) possibilities to combine the generators and different fields. For instance, if n=4 then 24 possibilities to use generators of different fields may exist, while, say for n=5 270 possibilities may exist. 
     Therefore in this case it is possible to use different combinations of generators (with different fields) having totally φ(2 n −1)IR(n) possibilities. If the degree of iterated masking is greater than 24 it is better to move to n&gt;4. 
     Partitioning Procedure 
     In one embodiment of the present invention it is possible to apply a procedure of partitioning the elements of CUR n     j    between the collections of tables Tb n     j   =1, . . . , c. This can cause the distribution procedure to be faster and thereby accelerate the algorithm. 
     It is possible to fix n and, without loss of generality, describe the new partitioning procedure for CUR. 
     Consider an iterating masking process of degree l≧0 and prepare two mappings T 0  and T 1  
 
 T   0 :{0, . . . ,2 n −1}→Γ 0  
 
 T   1 :{0, . . . ,2 n −1}→Γ 1  
 
where Γ 0  and Γ 1  are sets of random positive non-zero x&lt;r. Recall that r is the number of tables between which the elements of CUR l  may be distributed. In general, for x, y∈{0, . . . , 2 n −1} and x≠y
 
 T   0 ( x )= T   0 ( y )
 
and
 
 T   1 ( x )= T   1 ( y ).
 
     However, it may happen that
 
 T   0 ( x )≠ T   1 ( x )
 
for all x∈{0, . . . , 2 n −1} and even Γ 0  ∩ Γ 1 =Ø.
 
     It is possible to begin hashing a message M (with jumping or without jumping) and consider CUR 1   l , where l≧0 is the iterating masking of degree l. If M[1] is 0, it is possible to assign CUR 1   l  to the table with index T 0 (int(CUR 1   l ), otherwise it is possible to assign it to the table with index T 1 (int(CUR 1   l ). Reference to the table to which CURL is assigned may be to the current table and its index may be denoted thereby T c     1   . 
     Denote by B[2] the first bit of element M 2 , for which it is possible to compute CUR 2   l . Again, 
     if B[2] is 0 it is possible to assign CUR 2   l  to table
 
 T   c     1     +T   0 ( int ( CUR   2   l ))mod  r,  
 
otherwise, CUR 2   l  will be sent to table with index
 
 T   c     1     +T   1 ( int ( CUR   2   l )mod  r.  
 
     On the i-th step of calculation, it is possible to assign CUR i   l  to the table with index
 
 T   c     1     +T   c     2     + . . . +T   c     i−1     +T   0 ( int ( CUR   i   l ))mod  r  
 
if B[i] is 0, and to the table with index
 
 T   c     1     +T   c     2     + . . . +T   c     i−1     +T   1 ( int ( CUR   i   l )mod  r  
 
otherwise.
 
     Define another, more complicated way of calculating the indices of the tables to which it is possible to assign the corresponding elements of CUR l . Assume, for example, that l=3. On the first step of the calculation, if B[1] is 0, it is possible to assign CUR*** 1  to the table with index
 
 T   0 ( int ( CUR   1   ⊕CUR*   1   ⊕CUR**   1   ⊕CUR***   1 )).
 
     Otherwise, it may be assigned to the table with index
 
 T   1 ( int ( CUR   1   ⊕CUR*   1   ⊕CUR**   1   ⊕CUR***   1 )).
 
     On the i-th step of calculation B[i] may be estimated. If B[i] is 0, it is possible to send CUR i *** to the table with index
 
 T   c     1     +T   c     2     + . . . +T   c     i−1   ( int ( CUR   i   ⊕CUR*   i   ⊕CUR**   i   ⊕CUR***   i ))mod  r.  
 
     If not, it is possible to assign it to the table with index
 
 T   c     1     +T   c     2     + . . . +T   c     i−1     +T   1 ( int ( CUR   i   ⊕CUR*   i   ⊕CUR**   i   ⊕CUR***   i ))mod  r.  
 
     In general, for l&gt;0 it may be possible to consider any l+1−placed function Cl
 
 Cl:F   2   n × . . . × F   2   n   →F   2   n  
 
and then, depending on B [i], calculate the index
 
 T   c     1     +T   c     2     + . . . +T   c     i−1     +T   0 ( int ( Cl ( CUR   i   ,CUR*   i   , . . . ,CUR   i   l ))mod  r,  
 
or
 
 T   c     1     +T   c     2     + . . . +T   c     i−1     +T   1 ( int ( Cl ( CUR   i   ,CUR   i   *, . . . ,CUR   i   l )))mod  r  
 
of the table, to which CUR i   l  will be sent, i=1, . . . , k.
 
     In general, any function modulo r may be used to calculate the indices of the activated tables. 
     Requirements for the Lengths of the Bit Strings 
     In one embodiment of the present invention the bit strings may play an important role in the polynomial-based hash algorithm. The bit string requirements disclosed herein may increase security of the function, as they increase the number of inner states of the algorithm. 
     In one embodiment of the present invention it is possible to assign different sizes to different bit strings even when the considered bit strings are associated with the same table. 
     Thus, for tables Tb i   n     j    bit strings e ix   n     j    may be assigned that have different lengths sz ix   n     j    for a collection of indices x∈Θ i   n     j    associated to the table Tb i   n     j    for i=1, . . . , r n     j   , j=1, . . . , c, where r n     j    is a number of tables prepared for the corresponding j. So, for all i=1, . . . , r n     j   , and j=1, . . . , c, it is possible now to have
 
 sz   ix   n     j     ≠sz   iy   n     j     (15)
 
for any x and y such that x≠y, and x, y∈Θ i   n     j   .
 
Splitting with Jumping and the Bit Strings
 
     In one embodiment of the present invention bit strings may be related to splitting with jumping. Embedding new bit strings into the construction of the hash function may lead to increasing the numbers of inner states of the function, which, in turn may increase the security of the function and allow more effective control of the inner structure of the function. 
     A first step may be to fix n and assume that splitting with jumping is to be performed. It means that by some algorithm integers q i  may be generated, such that 0≦q i ≦n, i=1, . . . , k, to form a sequence (4). A new collection of bit strings may be defined, which will be referenced as bit strings related to jumping. We will refer the collection of the bit strings as BSJ. 
     To each table Tb j , it is possible to generate another collection of bit strings ε js  of size δ js , j=1, . . . , r, s∈Ξ j , where Ξ j  is a collection of indices associated with a table Tb j , for which the bit strings ε js  are formed. A bit string ε i0  may be reserved that is not related to any particular element of table Tb i . If Ξ i  contains the indices for all s=1, 2 n     j   , a special bit string ε i0  is not required, and therefore, in that case 0∉Ξ i . Otherwise any of the Ξ i  contains 0, that is, a special bit string is always prepared. Therefore x∈Ξ i  and x≠0 means that for i=1, . . . , r, a bit string ε ix  is prepared and the bit string is associated to entry x−1 of table Tb i . Denote by ε js (t) the t-th bit of a bit string ε js , for t=1, . . . , σ js , j=1, . . . , r, s∈Ξ j . Before processing, all of the bits within each of the bit strings are set to 0. 
     Updating the Bit Strings Related to Jumping: Scheme I 
     In one embodiment of the present invention it is possible to assume that the iterated masking procedure of degree l(*)≧0 is constructed and let CUR 1   l(*)  be the first element. Assume also that a table Tb x     1   , is activated and denote y 1 =int(CUR 1   l(*) ). Then if y 1 +1 ∈Ξ x     1   , it is possible to set
 
ε x     1     y     1     +1 ( q   1 )=1,
 
otherwise
 
ε x     1     0 ( q   1 )=1,
 
     Consider CUR 2   l(*)  and let Tb x     2    be a table that was activated by y 2 =CUR 2   l(*) . 
     Then if y 2 +1∈Ξ x     2   , it is possible to set
 
ε x     2     y     2     +1 ( q   1   +q   2 )=1,
 
otherwise
 
ε x     3     0 ( q   1   q   2 )=1,
 
     Here, q 1  and q 2  are the corresponding integers that were generated during splitting with jumping and, of course, it may be presumed that q 1 +q 2 &lt;σ x     2     y     2+1    and q 1 +q 2 &lt;σ x     2     0 . 
     Assume further that CU m   l(*)  is calculated and let Tb x     m    be a table that was activated by y m , where y m =CUR m   l(*). Then if y   m +1∈Ξ m     2    it is possible to set
 
ε x     m     y     m     +1 ( q   1   q   2   + . . . +q   m  mod σ x     m     y     m     +1 )= B⊕ 1,
 
otherwise
 
ε x     m     0 ( q   1   +q   2   + . . . +q   m  mod σ x     m     0 )= B⊕ 1,
 
where B was the (q 1 +q 2 + . . . +q m  mod σ x     m     0 )-th bit value of the considered bit string before the update occurred.
 
Updating the Bit Strings Related to Jumping: Scheme II
 
     In another embodiment of the present invention it is possible to consider one more scheme of updating the bit strings relating to jumping. According to Scheme I, presented above, the bit strings may be updated based on the values of q 1 , . . . , q k , where k is a total number of elements of splitting a message M. Forming the procedure of updating the bit strings, may be based on the usage of M i , i=1, . . . , k and various elements of CUR. 
     Prepare mapping
 
α:{0, . . . ,2 n −1}→Δ,
 
where Δ is a set of random integers greater than 0. In general, |Δ|≧2 n .
 
     Let again CUR 1   l(*)  be the first element of the iterated masking procedure. Assume that a table Tb x     1    is activated and denote y 1 =int(CUR 1   l(*) ). Then if y 1 +1∈Ξ x     1   , it is possible to set
 
ε x     i     y     1     +1 (α( int ( M   1 )+ int ( CUR   1   l(*) ))mod σ x     1     y     1     +1 )= B⊕ 1,
 
where B is the value of the ε x     i     y     1     +1  (α(int(M 1 )+int(CUR 1   l(*) )) mod σ x     1     y     1     +1 )-th bit of bit string ε x     i     y     i     +1  before the updating. If y 1 +1∉Ξ x     1   , it is possible to set
 
ε x     i     0 (α( int ( M   1 )+ int ( CUR   1   l(*) ))mod σ x     1     0 )= B⊕ 1,
 
where, again B is the corresponding bit value of bit string ε x     i     0  before the updating.
 
     Assume, further that a table Tb x     i   , is activated by element CUR i   l(*)  on the i-th step of processing. Denote y i =int(CUR i   l(*) ) and assume that y i +1∈Ξ x     i   . Then it is possible to set
 
ε x     i     y     i     +1 (α( int ( M   i )+ int ( CUR   1   l(*) ))mod σ x     1     y     1     +1 )= B⊕ 1,
 
otherwise,
 
ε x     i     0 (α( int ( M   i )+ int ( CUR   1   l(*) ))mod σ x     i     0 )= B⊕ 1,
 
     We note that B is an appropriate bit value of the corresponding bit string before updating. 
     Any function α involving the elements M, CUR i   l(*) , i=1, . . . , k, l(*), =0, . . . p may be utilized here. 
     After forming the tables and the bit strings related to jumping, a computation of values BSJ may be undertaken in accordance with 
               BSJ   ⁡     (   i   )       =       ∑     x   ∈     Ξ   i         ⁢       (     x   +   1     )     ⁢     int   ⁡     (     ɛ   ix     )                         i   =   1     ,   …   ⁢           ,     r   .           
The Bit Strings Related to Iterated Masking
 
     Another class of bit strings may naturally arise during an iterated masking procedure of degree l≧0, and this class may be formed in a few ways. Generally, the realization of the iterated masking procedure of degree greater than 0 is a powerful way of increasing the security of the function. Furthermore, embedding the new class of bit strings into the construction of the function will increase its security even more. It is possible to refer the bit strings of the new class as BST bit strings of the corresponding degree. 
     Let M be a message. Let n be fixed and consider the iterating masking procedure of degree l≧0. It is possible to calculate the elements of CUR sequences of degrees starting from 0 up to l&gt;0. Denote the corresponding sequences CUR l(*) , where l(*)=0, 1, . . . , l. In general, instead of CUR 0(*) , CUR 1(*) , CUR 2(*) , . . . simply may write CUR, CUR*, CUR**, . . . , correspondingly. 
     It is clear that it is not necessary a priori to calculate all the elements of CUR 0(*) , CUR 1(*)  and so forth. During the stages of the calculation it is possible to prepare only those elements of the corresponding sequences CUR l(*)  that are needed for the calculation of the elements of sequence CUR l(*)+1 . 
     For example, for l=2 and for some i&gt;2 n +2, to calculate CUR** i , it is possible to have calculated just
 
 CUR*   i   ,CUR*   i−1  
 
and 2 n  elements
 
 CUR**   j   ,CUR**   j+1   , . . . ,CUR**   j+2     n−1   ,
 
where j=i−2−2 n .
 
     Now to each table, it is possible to additionally associate, in general, l+1 layers or collections of new bit strings. These new bit strings may be referenced as the bit strings related to iterated masking of the corresponding degree, or simply the bit strings of the corresponding degree. These new bit strings will be related to the collections CUR l(*)  for l(*)=0, 1, . . . , l, where l(*) is the degree of the considered masking procedure. 
     First, let us define a layer of the bit strings of degree 0. Assume that a map may be defined
 
ρ 0 :{0,1, . . . ,2 n −1 }→Y   0  
 
where Y 0  is a collection of random non-zero positive integers. For instance, Y 0  may consist of random elements from 1 to 2 n . In general, it may happen that
 
ρ 0 ( x )=ρ 0 ( y )
 
for x, y∈{0, 1, . . . , 2 n −1} and x≠y.
 
     Denote, further, by υ i   0  a collection of bit strings associated to table Tb i , i=1, . . . , r. Any such collection may contain no more than 2 n  bit strings. Then let W i   0  be a subset of {1, . . . , 2 n }. W i   0  reflects the entries of table Tb i , for which the corresponding bit string will be defined, i=1, . . . r. Expression x∈W i   0  means that for the x−1 entry of the table, a bit string υ ix   0  of length sz ix   0  is arranged. If
 
 W   i   0 ≠{1, . . . ,2 n }
 
one more special bit string υ i0  that will not be associated to any entry of the table Tb i , is reserved, i=1, . . . , r. A special bit string for the table Tb i  may not be reserved if
 
 W   i   0 {1, . . . ,2 n }
 
i=1, . . . , r.
 
     As usual, all of the bits for each of the bit strings are set to 0 before processing. 
     Denote by υ js   0 (t) the t-th bit of the bit string υ js   0 , j=1, . . . , r and s∈W j   0 . Assume that CUR 1   0  has been calculated and assume also that a table Tb x     1   , is activated. 
     Set
 
 y   1 =ρ 0 ( int ( CUR   1   0 ).
 
     Then for z 1 =int(CUR 1   0 )+1, if z 2 ∈W x     1     0 , it is possible to set
 
υ x     1     z     1     0 ( y   1 )= B⊕ 1,
 
otherwise
 
υ x     1     0   0 ( y   1 )= B⊕ 1.
 
     Here, B is the value of the y 1 -th bit of the bit string υ x     1     z     1    before updating. In our case, B is 0, as all of the bits in each of the bit strings are set to 0 from the beginning. 
     Assume that a sequence
 
 CUR   1   0   , . . . ,CUR   j−1   0   ,CUR   j   0  
 
is calculated for some j&gt;1 and denote
 
 y   1 =ρ 0 ( int ( CUR   1   0 )), . . . , y   j =ρ 0 ( int ( CUR   j   0 )).
 
     Assume also that all of the bit strings for the corresponding tables were processed when the elements
 
 CUR   1   0   , . . . ,CUR   j−1   0  
 
were distributed. It is now possible to process CUR j   0 .
 
     Assume that a table Tb x     j    was activated by CUR j   0  and let z j ∈W x     j     0 , where z j =int(CUR j   0 )+1. Then it is possible, for example, to set
 
υ x     j     z     j   ( y   1   + . . . +y   j  mod  sz   x     j     z     j     0 )= B⊕ 1.
 
     If z j  ∉ W x     j     0 , it is possible to set
 
υ x     j     0 ( y   1   + . . . +y   j  mod  sz   x     j     0   0 )= B ⊕ 1.
 
     Similarly, having defined mappings
 
ρ 1 :{0,1, . . . ,2 n −1}→ Y   1 .
 
. . .
 
ρ 1 :{0,1, . . . ,2 n −1}→ Y   l .
 
it is possible to process the layers of bit strings υ i   1 , . . . , υ i   l , i=1, . . . , related to the iterated masking collections CUR 1 , . . . , CUR l  of the corresponding degrees. Of course, the collections
 
 Y   0   Y   1   , . . . ,Y   l  
 
of random non-zero positive integers may all be different. In addition, the mappings
 
ρ 0 ,ρ 1 , . . . ,ρ l  
 
may be all different as well.
 
     Any other operation, different from (y 1 + . . . +y j )mod sz x     j     z     j     0  as presented above, may be used in forming bit strings. For example, it may be possible to apply the expression
 
( y   1   +y   2   + . . . +y   j ) 2  mod  sz   x     j     z     j     0  
 
and so forth.
 
     Having finished the procedure of forming the tables and the bit strings for all layers, it is now possible to move to the next stage of hash-value calculation. This involves computing the special values BST. There may be at least two ways of computing BST. 
     Firstly, for each table Tb i , i=1, . . . , r, it is possible to compute BST in accordance with 
     
       
         
           
             
               BST 
               ⁡ 
               
                 ( 
                 i 
                 ) 
               
             
             = 
             
               
                 
                   ∑ 
                   
                     x 
                     ∈ 
                     
                       W 
                       i 
                       0 
                     
                   
                 
                 ⁢ 
                 
                   
                     ( 
                     
                       x 
                       + 
                       1 
                     
                     ) 
                   
                   ⁢ 
                   
                     int 
                     ⁡ 
                     
                       ( 
                       
                         v 
                         ix 
                         0 
                       
                       ) 
                     
                   
                 
               
               + 
               
                 2 
                 ⁢ 
                 
                   
                     ∑ 
                     
                       x 
                       ∈ 
                       
                         W 
                         i 
                         1 
                       
                     
                   
                   ⁢ 
                   
                     
                       ( 
                       
                         x 
                         + 
                         1 
                       
                       ) 
                     
                     ⁢ 
                     
                       int 
                       ⁡ 
                       
                         ( 
                         
                           v 
                           ix 
                           1 
                         
                         ) 
                       
                     
                   
                 
               
               + 
               
                 
                   … 
                   ++ 
                 
                 ⁢ 
                 
                   ( 
                   
                     l 
                     + 
                     1 
                   
                   ) 
                 
                 ⁢ 
                 
                   
                     ∑ 
                     
                       x 
                       ∈ 
                       
                         W 
                         i 
                         l 
                       
                     
                   
                   ⁢ 
                   
                     
                       ( 
                       
                         x 
                         + 
                         1 
                       
                       ) 
                     
                     ⁢ 
                     
                       
                         int 
                         ⁡ 
                         
                           ( 
                           
                             v 
                             ix 
                             l 
                           
                           ) 
                         
                       
                       . 
                     
                   
                 
               
             
           
         
       
     
     Secondly, assume that the sizes of the bit strings υ js   l(*) , j=1, . . . , r and s∈W j   0  are equal for a particular table and layer, that is,
 
 sz   js     1     0   =sz   x     js       2     0 ,
 
for all s 1 , s 2  such that s 1 ≠s 2 , s 1 , s 2 ∈W j   0 , and
 
 sz   js     1     1   =sz   js     2     1  
 
for all s 1 , s 2  such that s 1 ≠s 2 , s 1 , s 2 ∈W j   1 , and so forth.
 
     It is possible that sz js   l′(*)  may not be equal to sz js   l(*)  even if both W j   l′(*)  and W j   l(*)  contain the same element s for any j=1, . . . , r and l(*)=0, . . . l, l′(*)=0, . . . , l, where l(*)≠l′(*). 
     In this case, BST(i) is computed as follows
 
 BST ( i )= int (⊕ {x∈W     i       0}   υ ix   0 )+2 int (⊕ {x∈W     i       1}   υ ix   1 )+ . . . ++( l+ 1) int (⊕ {x∈W     i       1}   υ ix   1 )
 
for i=1, . . . , r.
 
     The symbol ⊕ {x∈W     i       0}   υ ix   0  may be used in the following context. For any Y={x 1 , . . . , x k },
 
⊕ {x∈Y}   z   x   =z   x     1     ⊕ . . . ⊕z   x     k   .
 
Formula for Calculating Sums (Knapsacks)
 
     In one embodiment of the present invention, having constructed new types of the bit strings, namely those related to jumping and iterated masking of all degrees, the formula for calculating the corresponding sum (knapsack) may be different. Thus, the formula of calculating a sum V for a fixed n, may be as follows
 
 V=BSJ (1)+ BST (1))+2( BSJ (2)+ BST (2))+ . . . + r ( BSJ ( r )+ BST ( r )).
 
The Recursive Consecutive Padding I
 
     In embodiments of the present invention multiple methods for constructing new padding sequence for a message M may be applied. Such padding schemes may increase the security of the hashing algorithm because for any file it is possible to use a practically unique padding sequence. 
     Let M be a sequence of bits of size k and assume that M is not padded beforehand. 
     After splitting, masking, partitioning, and forming the bit strings, it is possible to obtain tables Tb i   n     j   , i=1, . . . , r n     j   , j=1, . . . , c, where r n     j    are the numbers of the tables generated for the corresponding In addition, for every table Tb j   n     i    it is possible to generate the bit strings e js   n     i   , j=1, . . . r n     i   , i=1, . . . , c, s∈Θ j   n     i   , where Θ j   n     i    is a collection of indices associated with a table Tb j   n     i    for which the corresponding bit strings are formed. 
     The collections of indices Θ j   n     i    may either be determined prior to the start of hashing or defined during the process of CUR distribution. In general, the sizes of the bit strings for different tables can be different. Assume that the procedure of forming tables and bit strings for a message M is completed for all n j . Denote by CUR l     j     1   n     j    the final values in the c collections
 
 CUR   n     1     ,CUR   n     2     , . . . ,CUR   n     c   ,  (16),
 
respectively.
 
     As it is possible to perform splitting with jumping for some or even for all n j , the indices l j  may be different for different n j , j=1, . . . , c. 
     Denote, further, by ζ 1   n     j    the indices of the tables that were activated by CUR l     j     1   n     j    for the corresponding j=1, . . . , c. Define
 
α 1   n     j     =μx   [int ( CUR   l     j     1   n     j   )&lt; x]   (17)
 
if there exists x∈Θ ζ     2       n       j     n     j    such that x&gt;CUR l     j     1   n     j    or
 
α 1   n     j   =0  (18)
 
otherwise. Here, μx means “the smallest x such that”.
 
     It is then possible to pad M by consecutively processing the bits from the bit strings 
                   ⅇ       ζ   1     n   j         α   1       n   j         n   j             (   19   )               
for j=1, . . . , c.
 
     Performing the padding steps, it is possible to summarize the number of bits within the bit strings (19) that were used during the padding steps for j=1, . . . , c. If the sum of the lengths of the bit strings is equal to 4096, it is possible to stop the padding and conclude the process of forming the tables and the bit strings by “wrapping up” the message M [1]. 
     Assume, however, that all of the bit strings (19), for j=1, . . . , c are used, and assume, further, that the total sum of the lengths of the bit string is less than 4096. 
     In this case, denote by CUR l     j     2  the final values in the c collections
 
 CUR   p     1     n     1     ,CUR   p     1     n     2     , . . . ,CUR   p     1     n     c     (20)
 
that were obtained after padding the message by bit strings (19). The index p 1  indicates that the first iteration of padding has already been performed while forming the collection of polynomials CUR p     1     n     j   , j=1, . . . , c.
 
     Denote by ζ 2   n     j    the indices of the tables that were activated by CUR l     j     2   n     j    for the corresponding j=1, . . . , c. Define α 2   n     1    in accordance with (17) and (19). It is possible now to use ζ 2   n     j    and CUR l     j     2   n     j    in (17) and (19) instead of ζ 1   n     j    and CUR l     j     n     j   , respectively. That is,
 
α 2   n     j     =μx [int( CUR   l     j     2   n     j   )&lt; x]   (21)
 
if there exists x∈Θ ζ     2       n       j     n     1    such that x&gt;CUR l     j     1   n     j    or
 
α 2   n     j   =0  (22)
 
otherwise. The second padding iteration may be started by consecutively using bits within the bit strings
 
                   ⅇ       ζ   2     n   j         α   2       n   j         n   j             (   20   )               
for j=1, . . . , c and continuously calculate the total number of bits which were used to pad M. Again, when the total sum of the bits reaches 4096 it is possible to stop padding, otherwise the third, then the fourth iteration may be executed, and so on. The padding procedure terminates when the total number of bits used for padding is equal to 4096. A person skilled in the art would appreciate that any number of bits, not just 4096 may be chosen.
 
Non-Recursive Consecutive Padding
 
     In another embodiment of the present invention, it is possible to apply a non-recursive consecutive padding scheme. This is a scheme, that involves the formation of a sequence of bits, by means of which it is possible to pad a message simply “copying” the bit strings one after another in accordance with the procedure described above. 
     In other words, the first bit string that will be used as the first “portion” of the padding sequence may be chosen and processed. After the processing of the bit string is completed, it is possible to take another bit string, process it and so forth. The procedure of choosing the bit strings that will form the padding sequence has been considered above in the context of recursive consecutive padding I. 
     The Partial Backward Splitting 
     In embodiments of the present invention it is possible to apply a partial backwards splitting procedure. In practice a file is read from disc to memory portion by portion. Usually such portions have a fixed size. For the purpose of the present invention it is possible to assume that the length of the portion may be fixed and it is possible to denote it by lp. So, let M be a hashed message. 
     It is possible to present M as a collection of the portions sp i , i=1, . . . , u, where sp 1  is the first part (a portion) of a file M, sp 2  is the second portion of M, and so forth. Denote by len(sp i ) the length of portions sp i , i=1, . . . , u. Note that len(sp i )=lp for 
     i=1, . . . , u−1 and len(sp u )≦lp, so that
 
| M |=( u− 1) lp +len ( sp   u ).
 
     The splitting procedure may be applied to a file presented as a collection of portions in the following way. Firstly, the direct splitting procedure (without or with jumping) will be applied to a padded file. For the direct splitting procedure it does not matter, in fact, that a file is presented in a form of a collection of portions. However the backward splitting procedure is modified now. 
     Denote by Op(sp i ) a collection of bits that may be obtained by inverting the portion sp i , i=1, . . . , u. For example, if a is a collection of bits
 
011010001110101,
 
where 0 is the first bit, 1 is the second bit and so forth, then
 
Op(a) is the following collection of bits
 
101011100010110.
 
Thus, the first bit of Op(a) is 1, the second bit is 0 and so forth.
 
     Let M be a hashed message (a file) and assume that M may be presented as a collection of portions sp i  of length lp, i=1, . . . , it, so that
 
 M=sp   1   ∥sp   2   ∥ . . . ∥sp   u ,
 
where by ∥ it is possible to denote the concatenation of the corresponding portions. Next it is possible to form M op , where
 
 M   op   =Op ( sp   1 )∥ Op ( sp   2 )∥ . . . ∥ Op ( sp   u ).
 
     Then it is possible to apply, for example, the direct splitting procedure (without or with jumping) to the obtained message (file). After the processing M and M op  is completed it is possible to apply a padding procedure. 
     This direct splitting procedure applied to padded M op  may be referenced as the partial backward splitting. 
     The partial backward splitting is a convenient splitting procedure, for instance, for on-line processing, because it does not have to be applied to the whole file. At the same time considering the partial backward splitting increases the security of the function. 
     In general, the partial backward splitting for a few different n may be applied. It is also possible to consider a few partial backward splitting, some of which are with jumping and the rest are without jumping. In this case it is possible to consider a few partial backward splitting for the same n, one of which is without jumping and the rest are with different jumping conditions. 
     These different conditions can be defined, for instance, by considering different jumping tables. It may also be possible to consider a few partial backward splitting with the same n and with different jumping tables. 
     Secure Hashing Construction 
     In one embodiment of the present invention a MAC (a secure hashing) construction for the polynomial-based hashing function is introduced. The construction is based on new classes of the bit strings. 
     Let S be a key of size l and denote by S i  the i-th bit of sequence S, i=1, . . . , l. Choose, further, some numbers u j &lt;2 n     j   , where j=1, . . . , c. The numbers u j  will define the number of the bit strings associated to each j=1, . . . , c. These numbers are determined beforehand. 
     Assume that l&lt;r i , where r i  is a number of tables prepared for n i . 
     If the goal is to connect the number of bit strings associated to the tables related to n 1  to the bits of the sequence S i , to realize this connection, it is possible to determine the number of the bit strings Φ i   n     1    associated to a table Tb i   n     1    in accordance with the following rule: For ∀i≦l it is possible to set 
     
       
         
           
             
               
                 
                   
                     Φ 
                     i 
                     
                       n 
                       1 
                     
                   
                   = 
                   
                     { 
                     
                       
                         
                           
                             
                               u 
                               1 
                             
                             , 
                           
                         
                         
                           
                             
                               
                                 if 
                                 ⁢ 
                                 
                                     
                                 
                                 ⁢ 
                                 
                                   S 
                                   i 
                                 
                               
                               = 
                               1 
                             
                             ; 
                           
                         
                       
                       
                         
                           
                             
                               
                                 u 
                                 1 
                               
                               - 
                               1 
                             
                             , 
                           
                         
                         
                           
                             
                               if 
                               ⁢ 
                               
                                   
                               
                               ⁢ 
                               
                                 S 
                                 i 
                               
                             
                             = 
                             0. 
                           
                         
                       
                     
                   
                 
               
               
                 
                   ( 
                   24 
                   ) 
                 
               
             
           
         
       
     
     For the remaining i=l+1, . . . , r 1  it is possible to set Φ i   n     1   =u 1 . 
     Assume now that 
             l   &lt;       ∑     j   =   1     c     ⁢     r   j             
and suppose that for t and m n     t    such that 1≦t≦c and  1 ≦m n     t   ≦r n     t   , there takes place
 
     
       
         
           
             l 
             &lt; 
             
               
                 
                   ∑ 
                   
                     j 
                     = 
                     1 
                   
                   
                     
                       n 
                       t 
                     
                     - 
                     1 
                   
                 
                 ⁢ 
                 
                   r 
                   j 
                 
               
               + 
               
                 
                   m 
                   
                     n 
                     t 
                   
                 
                 . 
               
             
           
         
       
     
     It is possible to process the following settings step by step. 
     For i=1, . . . , r 1 , it is possible to set 
     
       
         
           
             
               
                 
                   
                     Φ 
                     i 
                     
                       n 
                       1 
                     
                   
                   = 
                   
                     { 
                     
                       
                         
                           
                             
                               u 
                               1 
                             
                             , 
                           
                         
                         
                           
                             
                               
                                 if 
                                 ⁢ 
                                 
                                     
                                 
                                 ⁢ 
                                 
                                   S 
                                   i 
                                 
                               
                               = 
                               1 
                             
                             ; 
                           
                         
                       
                       
                         
                           
                             
                               
                                 u 
                                 1 
                               
                               - 
                               1 
                             
                             , 
                           
                         
                         
                           
                             
                               if 
                               ⁢ 
                               
                                   
                               
                               ⁢ 
                               
                                 S 
                                 i 
                               
                             
                             = 
                             0. 
                           
                         
                       
                     
                   
                 
               
               
                 
                   ( 
                   25 
                   ) 
                 
               
             
           
         
       
     
     Then for i=1, . . . , r 2 , and ƒ 1 =r 1 , it is possible to set 
                     Φ   i     n   2       =     {             u   2     ,               if   ⁢           ⁢     S       f   1     +   i         =   1     ;                   u   2     -   1     ,             if   ⁢           ⁢     S       f   1     +   i         =   0.                     (   26   )               . . . 
     
       
         
           
             
               
                 
                   
                     Φ 
                     i 
                     
                       
                         n 
                         t 
                       
                       - 
                       1 
                     
                   
                   = 
                   
                     { 
                     
                       
                         
                           
                             
                               u 
                               
                                 
                                   n 
                                   t 
                                 
                                 - 
                                 1 
                               
                             
                             , 
                           
                         
                         
                           
                             
                               
                                 if 
                                 ⁢ 
                                 
                                     
                                 
                                 ⁢ 
                                 
                                   S 
                                   
                                     
                                       f 
                                       
                                         
                                           n 
                                           t 
                                         
                                         - 
                                         2 
                                       
                                     
                                     + 
                                     i 
                                   
                                 
                               
                               = 
                               1 
                             
                             ; 
                           
                         
                       
                       
                         
                           
                             
                               
                                 u 
                                 
                                   
                                     n 
                                     t 
                                   
                                   - 
                                   1 
                                 
                               
                               - 
                               1 
                             
                             , 
                           
                         
                         
                           
                             
                               if 
                               ⁢ 
                               
                                   
                               
                               ⁢ 
                               
                                 S 
                                 
                                   
                                     f 
                                     
                                       
                                         n 
                                         t 
                                       
                                       - 
                                       2 
                                     
                                   
                                   + 
                                   i 
                                 
                               
                             
                             = 
                             0. 
                           
                         
                       
                     
                   
                 
               
               
                 
                   ( 
                   27 
                   ) 
                 
               
             
           
         
       
     
     Here i=1, . . . , r n     t     −1 , and ƒ n     t     −2 =ƒ n     t     −3 +r n     t     −2 . 
     It is possible to complete the process by setting 
                     Φ   i     n   t       =     {             u     n   t       ,               if   ⁢           ⁢     S       f       n   t     -   1       +   i         =   1     ;                   u     n   t       -   1     ,             if   ⁢           ⁢     S       f       n   t     -   1       +   i         =   0.                     (   28   )               
for i=1, . . . , m n     t    and ƒ n     t     −1 =ƒ n     t     −2 +r n     t     −1  
 
     The number of bit strings for the remaining tables are unchanged. Recall that from the very beginning u j  was defined to be the number of the bit strings for all the tables for the corresponding j=1, . . . , c. 
     The Parameterization of the Hash Function 
     In one embodiment of the present invention, it is possible to parameterize the considering hash function. The aim of the parameterization is to generate a wide class of the hash functions with different properties. There are a few possibilities to parameterize the function. 
     The Parameterization of the Size of a Hash Value 
     According to the NIST requirements a hash value can be 160, 224, 256, 384, or 512 bits of size. 
     The size of final hash value τ can be changed by changing GF*(2 τ ). 
     It may be necessary to change one more parameter, namely, the sizes of the bit strings, to generate a hash value of the corresponding size in order to make sure that hash values are correctly generated even for the messages of a small size. There are two possibilities to realize the correspondence between the size of a hash value and the sizes of the bit strings. 
     Every time when the size of a hash value is changed it is also possible to change the minimal size of the bit strings. For example, if for instance the size of a hash value is 256 bits, the minimal sizes of the bit strings should be greater or equal to 256 bits. 
     In yet another embodiment of the present invention, an additional means of realizing the correspondence between the size of a hash value and the sizes of the bit strings may be applied. Assume that it is possible a priori to know that the possible biggest size of a hash value, generated by the algorithm within some frame of time, is τ. For instance, let τ=384 bits, which means that it is possible to generate the hash values of 160, 224, 256 and 384 bits. In this case it is possible to set the minimal sizes of the bit strings as equal to 384 and it is not necessary to change the sizes of the bit strings within a considered time frame. 
     Parameterization of the Speed of the Function 
     In another embodiment of the present invention, parameterization of the speed of the function may be achieved by choosing splitting with jumping and defining mappings φ with the larger jumping bit distance (see the section “Splitting with jumping”). 
     Parameterization of the Security of the Function 
     The prior art points to several ways of increasing the security of the function. For example, the security of the algorithm may be increased by increasing: the number of tables; the number and the sizes of the bit strings prepared for the tables; and the degree of the iterated masking. Additionally, the security of the function can be increased by increasing the value c, that is by increasing the number of n j , j=1, . . . c, for which all steps of the algorithm may be executed. 
     A relatively “cheap” method of increasing the security is achieved by the following method. Assume that it is possible to realize the iterated masking of degree l&gt;0. The security of the function can be increased by means of increasing the number of layers of the bit strings that are reserved for the tables. If, for instance l=3, it may be possible to reserve up to 4 layers of the bit strings related to CUR l(*) , l(*)=0, . . . , 3. It may not be necessary to reserve all four layers. However, by increasing the number of the layers the security may be increased significantly. At the same time increasing the number of the layers leads to increasing the consumed memory, however it only minimally affects the speed of the function. 
     There is one more important moment related to the layers of the bit strings. Assume that only two layers of the bit strings are reserved for the iterated masking procedure of degree, say 4. There arises the question of choosing the two values of l(*), for which layers are reserved. Keeping in mind that the relation between the elements of splitting and the corresponding elements of the iterated masking of higher degree is more difficult to analyze, it is possible to conclude that security of the function may be increased if two layers are reserved for l(*)=4, and l(*)=3. 
     The Customization of the Hash Function 
     In one embodiment of the present invention, a paradigm for generating the hash functions by changing their inner structures is introduced. This procedure is referenced as customizing the hash function. There is a fundamental difference between the procedures of parameterization and customization of the hash function. Parameterization is the procedure of varying the security, the speed, or the memory consumption, etc. of the hashing algorithm, while customization is the procedure of generating (duplicating) the hash function with a different inner structure while keeping approximately the same level of security, speed, memory consumption, etc. In embodiments of the present invention varying methods of performing customization may be achieved. 
     Varying the Number of the Bit Strings 
     Consider an iterated masking procedure of degree l≧0 with splitting with jumping for direct and forward splitting. Denote by r 1  and r 2  the numbers of the tables prepared for direct and forward splitting, respectively. Up to l+3 layers of the bit strings associated to each table may exist (for either the direct or forward scheme of distribution) under the considered conditions. Indeed, l+1 layers are related to l+1 collections CUR l(*) , l(*)=0, . . . , l. One layer is related to the bit strings associated to the distribution procedure and another layer is associated with splitting with jumping. 
     Let lm 1  be a parameter (a bit sequence) of length r 1 +r 2 . Then, based on the scheme, according to which one changes the number of the bit strings associated to all r 1 +r 2  tables (described above in the MAC Construction section), the structure of the hash function may be customized. 
     In general it may be possible to consider up to 2 2     n    possibilities to choose the bit strings related to different indices of the tables. 
     Varying the Number of Layers of the Bit Strings 
     Consider now an iterated masking procedure of degree l&gt;0. Denote by lm 2  the parameter (a bit sequence) of length l and let lm 2 (i) be the i-th bit of lm 2 , i=0, 1, . . . , l. 
     The customization procedure in this case may be realized in the following way. If lm 2  (0) is 0, the layer of the bit strings may not be created for CUR 0 . Otherwise, the corresponding layer may be reserved for all the tables. If lm 2 (1) is 0 it is not necessary to reserve the layer of the bit strings for CUR*. Otherwise the layer may be created. This process continues for all degrees. 
     Assume now that the direct and backward splitting may be performed with iterated masking of degrees l 1  and l 2 , respectively. The size of lm 2  will be at least l−1+l 2 +l 2 +2, as the procedure just described can be expanded on the backward process of the calculation as well. 
     Varying the Number of the Bit Strings and the Number of Layers of the Bit Strings 
     In one embodiment of the present invention, the inner structure of the function may be altered by changing both the bit strings and the number of the layers of the bit strings. In this case the size of the customizing parameter can be lm 1 +lm 2 . 
     The Schemes of Customizing the Hash Function 
     In one embodiment of the present invention schemes of the customization of the hash function may be applied. For example: 
     The Customizing Scheme A 
     A message M may be hashed with a certain customizing parameter Im, so we may save the parameter Im in a public registry and send a message M with appended hash value h to a receiver. A receiver hashes the obtained message M using the parameter lm from a public registry, compares the new hash value with the appended one. 
     It is possible to change a customizing parameter in a public registry either every time when a message is hashed, or with certain interval of time. A customizing parameter can be generated by a pseudo-random generator as a random sequence of bits o f the corresponding length. 
     The Customizing Scheme B 
     The customizing scheme B may be effective in a hardware realization of the hash function. In accordance with the scheme a number of customizing parameters are generated. These are then numerated and saved in a special directory of any PC. For instance, this scheme may be realized in LAN. For example, a collection of customizing parameters may be generated and saved in a public directory. Hashing a message M may involve choosing the corresponding customizing parameter by pointing out the number of the used customizing parameter and sending the number to a public registry. A receiver may hash the obtained message, choosing the customizing parameter from a public directory based on the chosen index. 
     Keeping in mind the hardware realization of the algorithm, it is possible to place the collection of the customizing parameters in a flash memory. Assuming that all the computers use hardware realization of the hash function, that is the corresponding boards, such as, for example, FPGA or ASIC, may be included in all the computers in LAN. In such an environment it is possible to prepare the same collection of the customizing parameters in certain order for all the computers in LAN. In order to hash a message it is necessary to know solely the index of the customizing parameter, in accordance with which we customize the structure of the function. Switching from one index to another may be carried out from time to time in accordance with the security policy of LAN. Of course, all the customizing parameters may be protected by standard methods of protection of information in a flash memory or FPGA or ASIC. The preliminary placed collection of customizing parameters into flash or any other types of memory of all the boards from time to time may be updated. 
     Secure Hashing without MAC Construction 
     A key for changing a structure of the hashing scheme may be utilized. Such an approach may offer a few advantages before MAC construction. Firstly, the size of a used key may not be related to the size of a hash value. It may be possible to use the key of larger (or smaller) size than the size of a hash value. Secondly it may not be necessary to use a key every time when a message is hashed in the corresponding application. Once the inner structure of the hashing scheme is changed, a key may no longer be needed. The hash function with changed structure can be kept secret in such an embodiment. 
     This embodiment of the present invention, as a scheme may be effective in the case of hardware implementation of the algorithm. 
     A difference between MAC construction and the proposed scheme may be that in the case of a MAC construction a key may be utilized for “keying” a message, while in the embodiment of the present invention that applied hashing without MAC construction a key may be utilized for “keying” the structure of the hashing algorithm. 
     As the construction of the ERINDALE hash function disclosed herein can be complex it may be virtually computationally infeasible to determine or discover the inner (keyed) structure of the function based on even a large number of outputs. 
     The “ERINDALE-PLUS” Hash Function 
     In one embodiment of the present invention a construction of the polynomial based hash function may be applied. A main feature of the function, and a feature that differs this embodiment of the present invention from prior art and provides a benefit over prior art, consists in applying the splitting with jumping and the bit strings associated with the splitting and the iterated masking—along with a methodology of distributing the elements between the tables. The ERINDALE-PLUS is a customized and parameterized hash function that does not require a lot of memory. 
     Performing the splitting with jumping accelerates the speed of the algorithm, while considering the bit strings associated with the splitting with jumping and the iterated masking increases the security of the function as two new “time” dimensions are embedded into the construction of the function. There is one more very important new feature of the new function, namely the procedure of “filling” the tables. As the iterated masking of the degree greater than 0 is computed, the tables may be associated with the elements of CUR l (*) of different degrees. In the construction presented in the prior art, all the tables were associated with the elements from CUR of the same degree. 
     The function of the present invention may be implemented in a form of hardware or software. 
     Without loss of generality, it is possible to apply the direct and backward, or partial backward splitting presented above, though, in general, any number of splitting for a different n value can be contemplated. It may also be possible to apply splitting procedures for the same n value but with different jumping tables. 
     Let M be any sequence of bits. M may be preliminary padded and, on the other hand, it may be possible to choose the recursive consecutive padding I, or non-recursive consecutive padding. In this case the padding procedure will take place after processing M and forming the tables and the bit strings. 
     Multiple methods for padding a message M may be applied in embodiments of the present invention. 
     Denote by n d  and n b  the degrees of the polynomials for the direct and backward, or a partial backward splitting, respectively. Let, further l d  and l b  be the degree of the iterated masking for the direct and backward splitting, correspondingly. Prepare, then two collections of tables Tb l   d  and Tb j   b  for processing the corresponding elements of the direct and backward splitting, respectively, and denote by Tb i   d (x), (Tb j   b (x)) the x-th entries of the corresponding tables for i=0, . . . , l d , j=0, . . . , l b . The tables Tb i   d  will be related to the elements of CUR n     d    of different degrees, i=0, . . . , l d , while tables Tb i   n     b    will be associated to the elements of CUR n     b    of different degrees. If, for example, l d =7 and l b =15, table Tb 1   d  will be related to the elements of CUR n*     d   , while table Tb 3   b  will be associated to the elements of CUR n***     b   , and so forth. 
     To each table generally two layers of bit strings are prepared. One layer contains the bit strings related to splitting with jumping, and the second layer is linked to the bit strings associated with the iterated masking. Denote by Ls i   d , Lm i   d  the layers of the bit strings related to splitting with jumping and the iterated masking, correspondingly, that are linked to tables Tb i   d , i=0, . . . , l d . By analogy, the layers Ls j   b  and Lm j   b  of the bit strings related to splitting with jumping and the iterated masking, respectively, are linked to tables Tb i   b , i=0, . . . , l b . 
     If splitting without jumping is invoked the layers Ls i   b , i=0, . . . , l d  and Ls j   b , j=0, . . . , l b  may all be empty. 
     The process of updating the bit strings from Lm i   d , Lm j   b  i=0, . . . , l d , j=0, . . . , l b  was described earlier (see section “The bit strings related to the iterated masking”). Another scheme that may be applied is that of processing the tables and the bit strings without detailing. This is analogous to the direct splitting as involved in backward splitting. 
     The tables and the corresponding bit strings may be processed, for instance, for Tb 0   d . 
     Firstly, all the entries of all the tables may be set to 0, and all the bits of all the bit strings have value 0. 
     Assume that we apply splitting with jumping, that is, layer Ls 0   d  is not empty. Based on one of the schemes described in GROUP I and GROUP II subsections of the section “Multiple splitting with jumping”, it is possible to generate step-by-step a sequence q 1 , . . . , q k  of integers for realizing the splitting with jumping, where k is a number of the elements of splitting. 
     In one embodiment of the present invention the calculation may commence by computing the elements of CUR d  of degree 0. Let CUR 1   d  be the first element computed. It is then possible to increment by 1 the Tb 0   d (int(CUR 1   d ))-th entry of table Tb 0   d  and, having prepared mapping
 
ρ 0   d :(0,1, . . . ,2 n     d   −1)→ Y   0   d ,
 
to compute value
 
ρ 0   d ( int ( CUR   1   d )).
 
     Here Y 0   d  is a collection of random non-zero positive integers. 
     Based on the obtained value we update the corresponding bit string from layer Lm 0   d  as it was described earlier. 
     The bit strings may be updated from Ls 0   d . In fact, the procedure of updating the bit strings related to splitting with jumping was described in section “Splitting with jumping and the bit strings”. A procedure of updating the bit string that was described in subsection “Scheme II” may be applied with a modified formula of calculating α. 
     Prepare a mapping
 
α 0   d :{0, . . . ,2 n     d   −1}→Δ 0   d ,
 
where Δ 0   d  is a set of non-zero integers, we compute
 
α 0   d ( int ( M   2   ⊕CUR   1   d ))
 
and based on the value, update layer Ls 0   d  in accordance with the procedure, described in the section “Splitting with jumping and the bit strings”, Scheme II.
 
     It is possible to use M 2  as the generation of the elements of splitting, that is, elements M 1 , M 2 , . . . , M k  takes much less time than calculation of the elements of masking, that is, CUR 1   d , CUR 2   d , . . . , CUR k   d . Therefore it is possible to generate a block of elements of splitting for the time needed for calculation one element of the masking. 
     From now on, “update a layer Lm 0   d  (or Ls 0   d )”, will mean “update the corresponding bit string from layer Lm 0   d  (or Ls 0   d )”. 
     Let CUR 2   d  be the second element obtained in the process of computation. Again, it is possible to increment by 1 the Tb 0   d (int(CUR 2   d ))-th entry of table Tb 0   d  and after computing
 
ρ 0   d ( int ( CUR   2   d )).
 
update layer Lm 0   d . Then it is possible to calculate
 
α 0   d ( int ( M   3   ⊕CUR   2   d ))
 
and update layer Ls 0   d .
 
     On the i-th step of the calculation for i≦k, having computed CURB it is possible to increment by 1 the Tb 0   d (int(CUR 1   d ))-th entry of table Tb 0   d  and update layer Lm 0   d , based on
 
ρ 0   d ( int ( CUR   1   d )).
 
     Then it is possible to calculate
 
α 0   d ( int ( M   i+1   ⊕CUR   i   d ))
 
and update layer Lm 0   d .
 
     Let CUR k   d  be the last element of processing a message M. It is possible to increment by 1 the Tb 0   d (int(CUR k   d )-th entry of table Tb 0   d  and update layer Lm 0   d  after computing
 
ρ 0   d ( int ( CUR   k   d )).
 
     At last it is possible to compute
 
α 0   d ( int ( M   1   ⊕CUR   k   d ))
 
and update layer Ls 0   d .
 
     Consider now, the iterated masking procedure of degree 1. Without losing generality just the case of the direct splitting may be examined. 
     Having prepared table Tb 1   d  and two layers Lm 1   d  and Ls 1   d  of the bit strings related to splitting with jumping and the iterated masking of degree 1, respectively, it is possible to generate a few elements of splitting and let CUR 1   d*  be the first element of masking of degree 1. The Tb 1   d (int(CUR 1   d* )-th entry of the 
     table may be incremented by 1 and the layer Lm 1   d  may be updated after computing
 
ρ 1   d ( int ( CUR   1   d* ))
 
for the prepared mapping
 
ρ 1   d :{0,1, . . . ,2 n     d   −1 }→Y   1   d .
 
     In general, mapping ρ 1   d  is different from ρ 1   d . Then, having prepared mapping
 
α 1   d :{0,1, . . . ,2 n     d   −1}→Δ 1   d ,
 
it is possible to calculate
 
α 1   d ( int ( M   3   ⊕CUR   1   d* ))
 
and update layer Ls 1   d .
 
     On the i-th step of calculation for i≦k, obtaining CUR i   d*  the Tb 1   d (int(CUR i   d* ))-th entry of table Tb 1   d  may be incremented by 1 and computing
 
ρ 1   d ( int ( M   3   ⊕CUR   i   d* ))
 
update layer Lm 1   d .
 
     Then it is possible to consider
 
α 1   d ( int ( M   i+2   ⊕CUR   i   d* ))
 
and update layer Ls 1   d .
 
     To finish the description of the scheme it is possible to estimate the last two steps of the processing, namely, k−l and k. 
     For CUR k−1   d*  and CUR k   d*  it is possible to increment two entries
 
 Tb   1   d ( int ( CUR   k−1   d* ))
 
and
 
 Tb   1   d ( int ( CUR   k−1   d* ))
 
of table Tb 1   d  and after computing
 
ρ 1   d ( int ( CUR   k−1   d* ))
 
and
 
ρ 1   d ( int ( CUR   k   d* ))
 
correspondingly, to update layer Lm 1   d  two times.
 
     Finally, after calculating
 
α 1   d ( int ( M   k+1   ⊕CUR   k−1   d* ))
 
and
 
α 1   d ( int ( M   k+2   ⊕CUR   k   d* ))
 
it is possible to update layer Ls 1   d  two times.
 
     By analogy, the iterated masking procedure of degree l(*) and the calculation of the elements of CUR d     l(*)    may be utilized to increment the corresponding entries of table Tb l(*)   d  and, based on mapping
 
ρ l(*)   d :{0,1, . . . ,2 n     d   −1 }→Y   l(*)   d ,
 
update layer Lm l(*)   d  step-by-step.
 
     Keeping in mind the procedure of updating layer Ls l(*)   d , it is possible to use a mapping
 
α l(*)   d :{0, . . . ,2 n     d   −1}→Δ l(*)   d ,
 
and then, update layer Ls l(*)   d   a ) based on the following sequence of integers
 
α l(*)   d ( int ( M   i+1   ⊕CUR   i   d     l(*)   )),
 
for i=1, . . . , k−l(*)−1. Then it is possible to calculate l(*)+1 remaining elements in accordance with
 
α l(*)   d ( int ( M   i+1   ⊕CUR   k−l(*)+i   d     l(*)   ))
 
where i=0, . . . , l(*) and perform the last l(*)+1 steps of updating Ls l(*)   d . Similarly, all the tables and the two layers of bit strings for the backward splitting may be processed.
 
     Now processing of already prepared tables and the bit strings may proceed. It may be assumed that the padding procedure has been previously applied. 
     Assuming that splitting with jumping is available it is possible to start processing layers Ls i   d  and Ls j   b , i=0, . . . , l d , j=0, . . . , l b . 
     It is possible to calculate 
                 BSJ   d     ⁡     (   i   )       =       ∑     x   ∈     Ξ   i         ⁢       (     x   +   1     )     ⁢     int   ⁡     (     ɛ   ix   d     )                     and                 BSJ   b     ⁡     (   j   )       =       ∑     y   ∈     Ξ   j         ⁢       (     y   +   1     )     ⁢     int   ⁡     (     ɛ   jy   b     )                 
for i=0, . . . , l d  and j=0, . . . , l b . Here ε ix   b  and ε jy   b  are the bit strings for the corresponding i, j, x and y that were obtained after completing the direct and backward processes, correspondingly.
 
     It is also possible to compute 
                 BST             ⁢   d       ⁡     (   i   )       =       ∑     x   ∈     W   i   d         ⁢       (     x   +   1     )     ⁢     int   ⁡     (     v   ix   d     )                     and                 BST             ⁢   b       ⁡     (   j   )       =       ∑     x   ∈     W   j   b         ⁢       (     x   +   1     )     ⁢     int   ⁡     (     v   jx   b     )                 
for the bit strings from layers Lm i   b  and Lm j   b , respectively, i=0, . . . , l d  and j=0, . . . , l b .
 
     Next, applying the factorization procedure to tables Tb i   d  and Tb j   b , let J(n) be the lexicographically ordered set of all irreducible polynomials of degree less than n with the coefficients from F 2  and denote by irr(n) the cardinality of J(n). Thus, J(4) is the following ordered set:
 
{0,1, x,x+ 1, x   2   +x+ 1, x   3   +x+ 1, x   3   +x   2 +1}.
 
     Denote by FC n (h, i) the multiplicity of the i-th irreducible polynomial in the factorization of h∈F 2   n . For instance, the result may be
 
 FC   4 ( x   2   +x, 1)=0, FC   4 ( x   2   +x, 4)=1, FC   4 ( x   3   +x   2 ,3)=2.
 
     For each table Tb i   d  and Tb j   d  prepare one more table Tbf i   d  and Tbf j   b , i=0, . . . , l d , and j=0, . . . , l b . Any table Tbf i   d  contains irr(n d ) entries, while any table Tbf j   b  contains irr(n b ) entries, i=0, . . . , l d , j=0, . . . , l b . 
     For instance, if n d =4 and n b =5 then irr(4)=7 and irr(5)=10. Therefore any table Tbf i   d  and Tbf j   b  for i=0, . . . , l d  and j=0, . . . , l b  contains 7 and 10 entries, correspondingly. 
     Before processing the factorization procedure all the entries of the tables Tbf i   d  and Tbf j   b  are set to 0, i=0, . . . , l d  and j=0, . . . , l b . 
     Then calculate the values of the entries of the new tables in accordance with
 
 Tbf   i   d ( t )=Σ j=1   2     n     d   Tb   i   d ( j )* FC   n     d   ( pol ( j− 1), t )  (29)
 
t=1, . . . , irr(n d ), i=0, . . . , l d . Here pol(j−1), j=1, . . . , 2 n     d    is a polynomial presentation (with coefficients from F 2 ) of the corresponding integers written in a binary form. For example, pol(3)=x+1, pol(9)=x 3 +1 and so forth. Moreover, Tb i   d (j) and Tbf i   d (t) are the values of the j-th and t-th entries of tables, Tb i   d  and Tbf i   d , correspondingly, i=0, . . . , l d .
 
     By analogy 
     
       
         
           
             
               
                 
                   
                     
                       
                         Tbf 
                         i 
                         d 
                       
                       ⁡ 
                       
                         ( 
                         t 
                         ) 
                       
                     
                     = 
                     
                       
                         ∑ 
                         
                           j 
                           = 
                           1 
                         
                         
                           2 
                           
                             n 
                             d 
                           
                         
                       
                       ⁢ 
                       
                         
                           
                             Tb 
                             i 
                             d 
                           
                           ⁡ 
                           
                             ( 
                             j 
                             ) 
                           
                         
                         * 
                         
                           
                             FC 
                             
                               n 
                               d 
                             
                           
                           ⁡ 
                           
                             ( 
                             
                               
                                 pol 
                                 ⁢ 
                                 
                                   ( 
                                   
                                     j 
                                     - 
                                     1 
                                   
                                   ) 
                                 
                               
                               , 
                               t 
                             
                             ) 
                           
                         
                       
                     
                   
                   ⁢ 
                   
                     
 
                   
                   ⁢ 
                   
                     
                       t 
                       = 
                       1 
                     
                     , 
                     … 
                     ⁢ 
                     
                         
                     
                     , 
                     
                       irr 
                       ⁡ 
                       
                         ( 
                         
                           n 
                           b 
                         
                         ) 
                       
                     
                     , 
                     
                       i 
                       = 
                       0 
                     
                     , 
                     … 
                     ⁢ 
                     
                         
                     
                     , 
                     
                       
                         l 
                         b 
                       
                       . 
                     
                   
                 
               
               
                 
                   ( 
                   30 
                   ) 
                 
               
             
           
         
       
     
     After computing the entries of the tables Tbf i   d  and Tbf j   b  it may be possible to enumerate the entries in accordance with the known procedures described in the prior art. 
     Thus, obtaining integers E i   d  and E j   b , i=0, . . . , l d , j=0, . . . , l b  it may be possible eventually to compute V d  and V b  by
 
 V   d   =E   0   d   +BST   0   d   +BSJ   0   d +2( E   1   d   +BST   1   d   +BSJ   1   d )+ . . . ++( l   d +1)( E   l     d     d   +BST   l     d     d   +BSJ   l     d     d ).  (31)
 
and
 
 V   b   =E   0   b   +BST   0   b   +BSJ   0   b +2( E   1   b   +BST   1   b   +BSJ   1   b )+ . . . ++( l   b +1)( E   l     d     b   +BST   l     d     b   +BSJ   l     d     b ).  (32).
 
     Finally it is possible to compute
 
 V=n   d   V   d   +n   b   V   b ,
 
based on which the final hash value may be calculated in accordance with the procedure of the prior art.
 
Padding Procedure and the Final Hash Value Calculation Procedure
 
     One or more methods of computing the final hash value based on the processed bit strings and the tables may be applied in embodiments of the present invention, as may methods of padding. 
     In the present invention, it may be possible to let Tbf i   d (t) and Tbf j   b (z) be the entries of the tables obtained during the procedure of processing a message, where t=1, . . . , irr(n d ), z=1, . . . , irr(n b ) i=0, . . . , l d  and j=0, . . . , l b . Based on the values of the tables it may be possible to form a sequence of bits for padding that may be further processed before or after the recursive consecutive padding I, or non-recursive consecutive padding. 
     Denote by bin(x) a binary presentation of an integer x. 
     It may be possible to generate a sequence of bits Pad b  that will be a padding message for backward or a partial backward processing
 
Pad d =bin( Tbf   0   d (1))∥bin( Tbf   0   d (2))∥ . . . ∥bin( Tbf   0   d ( irr ( n   d )))∥bin( Tbf   1   d (1))∥bin( Tbf   1   d (2))∥ . . . ∥bin( Tbf   1   d ( irr ( n   d )))∥
 
. . .
 
bin( Tbf   l     d     d (1))∥bin( Tbf   l     d     d (2)∥ . . . ∥bin( Tbf   l     d     d ( irr ( n   d ))).
 
     Here ∥ is an operation of concatenation of binary strings. 
     Now it may be possible to generate a padding message Pad d  for the direct processing, for example, in accordance with
 
Pad d =bin( Tbf   0   b (1))∥bin( Tbf   1   b (1))∥ . . . ∥bin( Tbf   l     b     b (1))∥bin( Tbf   0   b (2))∥bin( Tbf   1   b (2))∥ . . . ∥bin( Tbf   l     b     b (2))∥
 
. . .
 
bin( Tbf   0   b ( irr ( n   b )))∥bin( Tbf   1   b ( irr ( n   b )))∥ . . . ∥bin( Tbf   l     b     b ( irr ( n   b ))).
 
     In one embodiment of the present invention it may be possible to modify the procedures of forming bit sequences Pad d  and Pad b . 
     It may be possible to apply a key or a part of a key to change the order of the entries from the tables. It may also be possible to use a customization parameter (or a part of it) for defining the order of the entries of the tables for forming Pad d  and Pad b . 
     After the padding messages are generated, they may be processed and after finishing the padding a consideration of the process of calculating the bit strings may be initiated. 
     A method of computing the final hash value just for layers Ls i   d  and i=0, . . . , l d , may be applied. Methods for computing the final hash value for other layers may incorporate similar or analogous procedures. 
     In general for software and hardware implementations it may be more convenient to set the lengths of the bit strings divisible by 8. In one embodiment of the present invention it may be assumed that the lengths of all the bit strings are divisible by 8. 
     It may be possible to denote by sub 1x   8  (ε ix   d ) the sequence of bits containing the first 8 bits of bit string ε ix   d , then by sub 2x   8 (ε ix   d ) the second 8 bits of bit string ε ix   d , x∈Ξ i     2   i=0, . . . , l d  and so forth. For any fixed i and x∈Ξ i  we have
 
ε ix   d   =sub   1x   8 (ε ix   d )∥ sub   2x   8 (ε ix   d )∥ . . . ∥ sub   t     i     x   8 (ε ix   d ),
 
where τ i *8=len(ε ix   d ), len(ε ix   d ) is the length of ε ix   d .
 
     It may be possible to also assume that the lengths of all (ε ix   d ) for x∈Ξ i  within considered layer i are equal. It may then be possible to compute
 
 val   jx   d =( int ( sub   jx   8 (ε ix   d ))* x )mod 256,
 
j=1, . . . , t i , i=0, . . . , l d , x∈Ξ i .
 
     It may also be possible to compute val in accordance with
 
 val   jx   i =( int ( sub   jx   8 (ε ix   d ))+ x )mod 256,
 
j=1, . . . , t i , i=0, . . . , l d , x∈Ξ i . Any operation that involves int(sub jx   8 (ε ix   d )) and x by mod 256 may be considered here.
 
     Next it may be possible to calculate 
                 h     i   ⁢           ⁢   1       =       g     x   1       (     val     1   ⁢     x   1       i     )       ⊕     g     x   2       (     val     1   ⁢     x   2       i     )       ⊕   …   ⊕     g     x     d   i         (     val     1   ⁢     x     d   i         i     )           ,         
then
 
                 h     i   ⁢           ⁢   2       =       g     x   1       (     val     2   ⁢     x   1       i     )       ⊕     g     x   2       (     val     2   ⁢     x   2       i     )       ⊕   …   ⊕     g     x     d   i         (     val     2   ⁢     x     d   i         i     )           ,         . . . 
                 h     it   i       =       g     x   1       (     val       t   i     ⁢     x   1       i     )       ⊕     g     x   2       (     val       t   i     ⁢     x   2       i     )       ⊕   …   ⊕     g     x     d   i         (     val       t   i     ⁢     x     d   i         i     )           ,         
where Ξ i ={x 1 , . . . , x d     i   }, and g x     1   , g x     2   , . . . , are different generators of GF(2 8 )*, i=0, . . . , l d  and ⊕ is an operation of addition in GF(2 8 ).
 
     Consider now the situation when the lengths of all bit strings for all layers Ls i   d , i=0, . . . , l d  are equal to t*8 for some t&gt;0. Assume again that the lengths of all the bit strings within all Ls i   d , i=0, . . . , l d  are equal. 
     It may be possible next to compute 
                 sh   1     =       f   1     int   ⁡     (     h   11     )         ⊕     f   2     int   ⁡     (     h   21     )         ⊕   …   ⊕     f     l   d       int   (     h     l     d   1         )           ,     
     ⁢       sh   2     =       f   1     int   ⁡     (     h   12     )         ⊕     f   2     int   ⁡     (     h   22     )         ⊕   …   ⊕     f     l   d       int   (     h     l     d   2         )           ,     
     ⁢   …                   sh   t     =       f   1     int   ⁡     (     h     1   ⁢   t       )         ⊕     f   2     int   ⁡     (     h     2   ⁢   t       )         ⊕   …   ⊕     f     l   d       int   (     h     l     d   t         )           ,         
where f 1 , f l     d    are different generators of GF(2 8 )*.
 
     By analogy it may be possible to compute values mh 1 , . . . , mh p  for layers Lm i   d , where p*8 is the length of all the bit strings from Lm i   d , i=0, . . . , l d . In general p and t are different. 
     The same calculations may be provided for backward layers Ls j   b  and Lm j   b , j=0, . . . , l b  and as the result of the calculations it may be possible to obtain collections of elements from GF(2 8 )
 
 bsh   1   ,bsh   2 , . . . , bsh   bt  and  bmh   1   ,bmh   2 , . . . , bmh   bp ,
 
where bt*8 and bp*8 are the lengths of the corresponding bit strings. It is possible that p, t, bp and bt may be all different.
 
     A procedure may be applied to generate q elements from GF(2 8 ) (or from any other finite field GF(2 n )) based on two collections of elements from GF(2 8 ) (or from any other finite field GF(2 n ))
 
 a   1   ,a   2 , . . . , a   n  and  b   1   ,b   2   , . . . ,b   m  
 
for different n, m&gt;0 such that n&gt;q and m&gt;q, but n&lt;2q and m&lt;2q.
 
     Present collection a 1 , a 2 , . . . , a n  as a 1 , a 2 , . . . , a q , c 1 , . . . , c 5 , where
 
 c   1   =a   q+1   ,c   2   =a   q+2 , . . . , c   s   =a   n .
 
     In a similar way present collection b 1 , b 2 , . . . , b m  as d 1 , d 2 , . . . , d l , b m-q+1 , . . . , b m , where
 
 d   1   =b   1   ,d   2   =b   2 , . . . , d   l   =b   l .
 
     There may be exactly q elements in collection b m-q+1 , . . . , b m  and s&lt;q, l&lt;q. 
     It may be possible to compute
 
 e   1   =g   (int(a     1     ⊕d     l     )  
 
 e   2   =g   (int(a     2     ⊕d     l−1     )   ⊕e   1 ,
 
 e   3   =g   (int(a     3     ⊕d     l−2     )   ⊕e   2 ,
 
. . .
 
 e   l   =g   (int(a     l     ⊕d     1     )   ⊕e   l−1 ,
 
 e   l+1   =g   (int(a     l+1     )   ⊕e   l ,
 
. . .
 
 e   q   =g   (int(a     q     )   ⊕e   q−1 ,
 
where g is a generator of GF(2 8 )* (or from a group GF(2 n )* related to any other finite field GF(2 n )).
 
     It may be possible further to calculate
 
 h   1   =f   (b     m     ⊕c     1     ) ,
 
 h   2   =f   (b     m−1     ⊕c     2     )   ⊕h   1 ,
 
 h   3   =f   (b     m−2     ⊕c     3     )   ⊕h   2 ,
 
. . .
 
 h   s   =f   (b     m−s     ⊕c     s     )   ⊕h   s−1 ,
 
 h   s+1   =f   (b     m−s−1     )   ⊕h   s ,
 
. . .
 
 h   q   =f   (b     m−q+1     )   ⊕h   q−1 .
 
     Here f is a generator of GF(2 8 )* (or from a group GF(2 n )* related to any other finite field GF(2 n )) which is different from g. 
     As another step it may be possible to calculate the desired q elements
 
 e   1   ⊕h   1   e   1   ⊕h   1   , . . . ,e   q   ⊕h   q .
 
     The procedure will be referenced to as the iterated q-generation procedure. 
     It is possible that s can be equal to 0, or l can be equal to 0. In this case in the iterated q-generation procedure it may be possible not to use the elements c 1 , . . . , c s , or d 1 , d 2 , . . . , d l , respectively. 
     Having the iterated q-generation procedure, it may be possible to remove the assumptions referenced previously, namely, that the bit strings have the same length in a framework of one layer and even in a framework of all layers Ls and Lm. 
     Indeed, it may be enough to find the bit string with the minimal length l min  inside of each layer and start applying step by step the iterated l min -generation procedure with all the bit strings starting from the first two. After obtaining one sequence of the corresponding elements of GF (2 8 ) in every layer, it may be possible to find the sequence containing the minimal number of the elements, which we denote by f min , and again starting from the first two layers step by step apply the iterated f min -generation procedure. In the result of the processing it may be possible to obtain a sequence of the corresponding elements from GF(2 8 ) containing f min  elements. 
     There may be four collections of the elements from GF(2 8 ) that may be obtained as the result of either applying the above described procedure or the corresponding iterated q-generation procedures. That is, it may be possible to have
 
 sh   1   , . . . ,sh   t   ,mh   1   , . . . ,mh   p  
 
and
 
 bsh   1   ,bsh   2   , . . . ,bsh   bt   ,bmh   1   ,bmh   2   , . . . ,bmh   bp .
 
     Denote n 1 =min {t, bp} and n 2 =min{p, bt}. Assume that 2n 1 &gt;t, 2n 1 &gt;bp, 2n 2 &gt;p and 2n 2 &gt;bt. 
     It may be possible to apply the procedure of the iterated n 1 -generation to collections sh 1 , . . . , sh t  and bmh 1 , bmh 2 , . . . , bmh bp . As the result it may be possible to obtain a collection of elements from GF(2 8 ) containing n 1  elements. The procedure of the iterated n 2 -generation may then be applied to collections mh 1 , . . . , mh p  and bsh 1 , bsh 2 , . . . , bsh bt . The result may be the corresponding collection of n 2  elements from GF(2 8 ). Denote the collections by F i , i=1, . . . , n 1  and V j , j=1, . . . , n 2 . 
     Let τ be a size of a hash value that needs to be generated. It may be possible to set from the beginning the lengths of the bit strings in such a way that 2τ&gt;n 1 , 2τ&gt;n 2 . Eventually the iterated τ-generation procedure may be applied to the collections F i , i=1, . . . , n 1  and V j , j=1, . . . , n 2  and the final hash value h τ  may be derived. 
     It may not be necessarily always to present the bit strings as the collection of elements of GF(2 8 ). For instance it may be possible to use GF(2 4 ), or even GF(2 2 ). If the length of a bit string is divisible by any a&gt;1, it may be possible to use GF(2 a ) 
     In one embodiment of the present invention, the number of tables prepared for both direct and backward (or a partial backward) splitting may be different. For example, it may be possible to prepare just one table for direct and one table for backward processes. One or more tables may be generated just for the direct (backward) procedure. In this case, for instance, based on the tables, the corresponding padding message may be prepared just for backward (direct) processing, while a padding message for direct (backward) processing may be prepared in accordance with recursive or non-recursive consecutive padding procedure. 
     In one embodiment of the present invention it may be possible to reserve up to l d +1 layers Lm d  and up to l d +1 layers Ls d  of the bit strings for the table associated to the direct processing. By analogy, up to l b +1 layers Lm b  and up to l b +1 layers Ls b  of the bit strings may be reserved for the table associated to the backward processing. It is also possible to increment the corresponding entries of both tables based on the elements of CUR a   d  (and CUR c   b ), where a≦l d  (and b≦l b ). 
     On the other hand, the list of the bit strings within the layers related to jumping and the list of the bit strings within the layers related to the iterated masking for both tables can be used as the parameter of customization. For example, let l d =37 and l b =42. In this case it is possible to use a parameter (a bit sequence) of size 74+86=160 as a customization parameter. Indeed, the first 74 bits of the customizing bit sequence are linked to the first table, that is, to the direct splitting. Specifically, the first 37 bits define the list of the bit strings of the layers related to splitting with jumping, while the next 37 bits customize the list of the bit strings within the layers related to the iterated masking. The customization procedure for the table associated to the direct splitting may be defined as follows. If, the i-th bit of the customization parameter is 0, it is not necessary to create the layer related to jumping for CUR d  of degree i−1, if i=1, . . . , l d +1, otherwise it is possible to embed the corresponding bit string associated to CUR d  of the iterated degree i−1. Then if the i-th bit of the parameter is 0 for i=l d +2, . . . , 2l d +2 it is not necessary to create the bit strings within the layer related to the iterated masking for CUR d  of degree i−l d −2, otherwise the corresponding bit strings will be built. 
     The same consideration may be applied to the remaining bits of the parameter. For example, it is possible to just work with the corresponding layers for the table associated to the backward splitting. 
     Finally, the number of the tables may be greater than two and less than l d +l b +2. 
     In this case many possibilities may be available to distribute the layers Lm i   d  and Ls i   d , i=0, . . . , l d  between the tables associated to the direct splitting. 
     By analogy, it may be possible to distribute layers Lm j   b  and Ls j   b , j=0, . . . , l b  between the tables associated with the backward splitting in different ways as well. 
     The ERINDALE-PLUS algorithm may provide a means for realizing secure hashing without MAC construction. The example of customizing the function disclosed above may be transferred to the building the scheme of secure hashing. Generally, various parameters of the function may be keyed, such as, for example: a collection of indices, for which the bit strings are generated; the lengths of the bit strings; the order of the entries of the tables during the procedure of forming Pad d  and Pad b ; and the order of processing the bit strings in the situation when the iterated q-generation procedure is applied. 
     The Digital Signature Algorithms Based on a Customized Hash Function 
     A digital signature is a method of authenticating any digital information. As an output of an applied digital signature algorithm may be one or more binary strings that provide authenticity, integrity and non-repudiation of the transmitted message. 
     Known digital signature algorithms are generally based on a public key cryptography and consist of two parts—a signing algorithm and a verification algorithm. Known digital signature algorithms usually employ a hash (or MAC) value of a file. 
     In one embodiment of the present invention the ERINDALE-PLUS hash function is applied. Before generating a digital signature for a file it is necessary to hash the file with a certain customization parameter. After generating the digital signature a receiver should be alerted that a certain customization parameter was used to compute a hash value, based on which the digital signature was calculated. 
     In another embodiment of the present invention, a customization parameter may be stored in a public directory. This storage of the customization parameter in a public directory may occur when a sender hashes a file. At this point the user applies the customization parameter from the directory for setting the corresponding inner structure of the hashing algorithm. Then a sender using a private key, the generated hash value, and information from a public directory may compute a digital signature. Thus after obtaining the file with the attached signature, a receiver may hash the file using the customization parameter from a public directory and then accept or reject the message based on the result of the verification algorithm. 
     Embodiments of the invention may be represented as a software product stored in a machine readable medium (also referred to as a computer-readable medium, a processor-readable medium, or a computer usable medium having a computer readable program code embodied therein). The machine readable medium may be any suitable tangible medium, including magnetic, optical, or electrical storage medium including a diskette, compact disk read only memory (CD-ROM), memory device (volatile or non-volatile), or similar storage mechanism. The machine-readable medium may contain various sets of instructions, code sequences, configuration information, or other data, which, when executed, cause a processor to perform steps in a method according to an embodiment of the invention. Those of ordinary skill in the art will appreciate that other instructions and operations necessary to implement the described invention may also be stored on the machine-readable medium. Software running from the machine readable medium may interface with circuitry to perform the described tasks. 
     As one example, the method of the present invention can be readily implemented in a Dynamically Linked Library or DLL which is linked to a computer program that utilizes an algorithm that embodies the hash function, MAC function or ERINDALE-PLUS function described above, for example, an encryption, decryption or authentication utility that is operable to apply said algorithm. 
     The computer program of the present invention is therefore best understood as a computer program that includes computer instructions operable to implement an operation consisting of the calculation of the hash value or secure hash value as described above. 
     Another aspect of the present invention is a computer system that is linked to a computer program that is operable to implement on the computer system the transformation of a MAC-value, in accordance with the present invention. 
     This invention will be of use in any environment where hash functions, MAC functions and ERINDALE-PLUS functions may be used for data integrity or authentication (digital signatures being an example). 
     An example is secure email. Several widely used systems for secure email (such as PGP and S/MIME) use SHA-1 as the hash algorithm. 
     As another example, the method of the present invention can be readily implemented in a specially constructed hardware device. Such a hardware implementation of the present invention may enable a dramatic increase in the speed of hashing, as all the hardware implementations of stream algorithms are usually much faster than the corresponding software implementations. In particular, one embodiment may apply one-chip hardware configuration. 
     The aspects of the present invention and embodiments thereof presented lend the invention to several applications. For example, the present invention may be applied to an online environment wherein digital signatures are routinely applied, for the purpose of ensuring the security of data passed between users. This use has practical applicability in several markets regarding the flow of electronic information, such as banking, legal, other professional businesses and trades, as well as within the public sector in government, universities, hospitals and other institutions. In these environments information is passed regularly between members by way of the Internet, Intranets and internal networks. Furthermore, as the speed of the hash function may be significantly increased when the invention is implemented by way of hardware, in such an implementation it may be possible to apply the invention to the flow of confidential information by way of methods requiring fast processing, such as video-conferencing. For example, organizations such as the military require secure and fast means of telecommunication to permit the passing of confidential information between members located distant from one another. The speed of the hash function can be very high in hardware implementations, for example, up to 3.4 giga-bits/second (FPGA V, ˜400 MHz), therefore, such an implementation may provide a utile means of supporting private video-conferencing and protecting the confidential of nature of information passed therein. Furthermore, online implementations of the present invention can utilize existing signal processing providers, such as telecommunications companies like as Bell Canada™ or Rogers™, as well as private networks, to facilitate transmissions. 
     The above-described embodiments of the present invention are intended to be examples only. Alterations, modifications and variations may be effected to the particular embodiments by those of skill in the art without departing from the scope of the invention, which is defined solely by the claims appended hereto. 
     It will be appreciated by those skilled in the art that other variations of the embodiments described herein may also be practiced without departing from the scope of the invention. Other modifications are therefore possible.