The present invention, in some embodiments thereof, relates to separable robust coding and, more particularly, but not exclusively, to a separable robust code for detecting errors in data strings.
Hardware systems are vulnerable to fault injection attacks. In fault injection attacks an adversary tampers with the hardware to modify the outputs [1,2], which changes the behavior of the device. Fault injection may be carried out using different physical methods, such as variations on voltage, external clock, white light, laser, etc. Some injections methods, such as jamming, especially target memories.
Some known protection methods against fault injection attacks include tamper protection and hardware duplication, however they are less applicable in small, mobile lightweight devices.
Another approach to detecting fault injection is the use of security oriented error detecting codes, which can detect any error with some probability. In error detecting codes the injected fault manifests as an additive error and can be detected regardless of the physical injection method. Hence, error detecting codes can protect these devices from some threats.
Security oriented codes are usually systematic because the validity of the codeword can be verified while simultaneously processing the information portion. In systematic codes every codeword is a q-ary vector of length n=k+r of the form C={c=(x, u(x))} where x consists of k information symbols over q=GF(q) and u consists of r redundancy symbols over q=GF(q).
It is generally assumed that an attacker can inject any error it chooses. This is why the effectiveness of security oriented codes is measured in terms of their maximal (i.e. worst) error masking probability. A security oriented code may have a deterministic encoder [3, 4, 5, 6] or incorporate randomness [7, 8]. The error detection capabilities of codes with random-encoding depend on the entropy of the random portion. However, the hardware implementation of a true Random Number Generator (RNG) is expensive and difficult, making them less suitable for low-cost devices. Moreover, the RNG must be shielded from fault injection attacks which could neutralize it. When properly designed, codes with deterministic encoding may be more effective than random codes with the same rate [9].
Embodiments of the invention present a code-plus-code coding scheme (also denoted herein CpC) that may be used to construct robust codes for any (k,r) pair, where k is the number of information symbols and r is the number of redundancy symbols in the code word. The CpC code is itself a separable robust code and is able to detect any error with nonzero probability, making it an effective code for detecting fault injection and jamming attacks.
The CpC code is constructed from l robust ground codes, optionally with different information and/or redundancy portion sizes. CpC codes with low implementation complexity may be designed for any code rate. Optionally, the CpC is implemented with an optimal set of ground codes which are selected by an optimization algorithm such as Algorithm 2 presented below.
According to an aspect of some embodiments of the present invention there is provided a method for detecting errors in a data string. The data string includes an information portion and a redundancy portion. The information portion includes at least two sub-strings. The method is performed in a hardware device by:
According to some embodiments of the invention, generating a composite redundancy word includes addition over a finite field of the first and second redundancy words.
According to some embodiments of the invention, the first and second redundancy words have equal length.
According to some embodiments of the invention, only one of the first and second separable robust codes is a quadratic sum (QS).
According to some embodiments of the invention, the first and second redundancy words have a different length.
According to some embodiments of the invention, the composite redundancy word is further generated from at least one additional redundancy word, where each additional redundancy word is generated by encoding a further one of the sub-strings with a separable robust code.
According to some embodiments of the invention, the first separable robust code and the second separable robust code are the same code.
According to some embodiments of the invention, the first separable robust code and the second separable robust code are different codes.
According to some embodiments of the invention, the method for detecting errors in a data string further includes outputting a data word in accordance with an error combatance logic in response to flagging an error.
According to some embodiments of the invention, at least one of the first and second separable robust codes is an error-correction code.
According to some embodiments of the invention, the hardware device includes a logic gates configured to perform the generating and the flagging.
According to some embodiments of the invention, the hardware device includes at least one of: a memory, a logic circuit, an integrated circuit (IC), a programmable logic element or a communication device.
According to some embodiments of the invention, the hardware device includes at least one non-transitory computer readable storage medium storing instructions and at least one processor configured to execute the instructions to perform the generating and the flagging.
According to some embodiments of the invention, the method for detecting errors in a data string further includes reading the data string from a memory.
According to some embodiments of the invention, the method for detecting errors in a data string further includes reading the data string from a register.
According to some embodiments of the invention, the method for detecting errors in a data string further includes extracting the data string from a data signal.
According to some embodiments of the invention, the method for detecting errors in a data string further includes receiving the data string through a data interface.
According to some embodiments of the invention, the method for detecting errors in a data string further includes reading the data string from a data bus in a logic circuit.
According to some embodiments of the invention, the method for detecting errors in a data string further includes obtaining the data string from nodes in a logic circuit.
According to an aspect of some embodiments of the present invention there is provided a checker for detecting errors in a data string. The data string includes an information portion and a redundancy portion. The information portion includes at least two sub-strings. The checker includes a redundancy generator and an error detector. The redundancy generator generates a first redundancy word by encoding a first one of the sub-strings with a first separable robust code, generates a second redundancy word by encoding a second one of the sub-strings with a second separable robust code and generates a composite redundancy word from the first and second redundancy words. The error detector flags an error when the redundancy portion of the data string differs from the composite redundancy word.
According to some embodiments of the invention, the composite redundancy word is further generated from at least one additional redundancy word, each additional redundancy word being generated by encoding one of the sub-strings with a separable robust code.
According to some embodiments of the invention, the composite redundancy word is generated by addition over a finite field of the first and second redundancy words.
According to some embodiments of the invention, the first and second redundancy words have equal length.
According to some embodiments of the invention, only one of the first and second separable robust codes is a quadratic sum (QS) code.
According to some embodiments of the invention, the first and second redundancy words have a different length.
According to some embodiments of the invention, the first separable robust code and the second separable robust code are the same code.
According to some embodiments of the invention, the first separable robust code and the second separable robust code are different codes.
According to some embodiments of the invention the checker outputs a data word in accordance with an error combatance logic in response to the flagged error.
According to some embodiments of the invention, the checker includes a plurality of logic gates in a logic circuit.
According to some embodiments of the invention, the checker is integrated into a hardware device. According to further embodiments of the invention, the hardware device includes at least one of: a memory, a logic circuit, an IC, a programmable logic element or a communication device.
According to some embodiments of the invention, the checker further includes: at least one non-transitory computer readable storage medium storing instructions and at least one processor configured to execute the instructions to perform the generating and the flagging.
According to some embodiments of the invention, the checker performs at least one of:
According to an aspect of some embodiments of the present invention there is provided a method of encoding information strings. The method is performed in a hardware device by:
According to some embodiments of the invention, the redundancy portion is generated by addition over a finite field of the respective redundancy words within the codewords.
According to some embodiments of the invention, at least one of the separable robust codes is a non-quadratic sum (QS) code.
According to some embodiments of the invention, at least two of the redundancy words have a different length.
According to some embodiments of the invention, the information string is separated into two sub-strings.
According to some embodiments of the invention, the hardware device includes a plurality of logic gates configured to perform the inputting, the associating and the outputting.
According to some embodiments of the invention, the hardware device includes at least one of: a memory, a logic circuit, an integrated circuit (IC), a programmable logic element or a communication device.
According to some embodiments of the invention, the hardware device includes at least one non-transitory computer readable storage medium storing instructions and at least one processor configured to execute the instructions to perform the generating and the outputting.
According to some embodiments of the invention, the method of encoding information strings further includes at least one of:
According to an aspect of some embodiments of the present invention there is provided an encoder which includes a codeword associator and a codeword outputter. The codeword associator separates an information string into at least two sub-strings, associates a first one of the sub-strings with a codeword of a first separable robust code, the codeword of the first separable robust code comprising a respective information word and a respective redundancy word, associates a second one of the sub-strings with a codeword of a second separable robust code, the codeword of the second separable robust code comprising a respective information word and a respective redundancy word. The codeword outputter outputs a concatenated-codeword an information portion which is formed as a concatenation of the information words and a redundancy portion generated from the redundancy words.
According to some embodiments of the invention, the redundancy portion is generated by addition over a finite field of the respective redundancy words within the codewords.
According to some embodiments of the invention, the information string is separated into two sub-strings.
According to some embodiments of the invention, only one of the first and second separable robust codes is a quadratic sum (QS) code.
According to some embodiments of the invention, the redundancy words have a different length.
According to some embodiments of the invention, the encoder includes logic gates in a logic circuit.
According to some embodiments of the invention, the encoder is integrated into a hardware device.
According to some embodiments of the invention, the hardware device includes at least one of: a memory, a logic circuit, an IC, a programmable logic element or a communication device.
According to some embodiments of the invention, the encoder further includes: at least one non-transitory computer readable storage medium storing instructions and at least one processor configured to execute the instructions to perform the separating, associating and outputting.
According to some embodiments of the invention, the encoder additionally performs at least one of:
Unless otherwise defined, all technical and/or scientific terms used herein have the same meaning as commonly understood by one of ordinary skill in the art to which the invention pertains. Although methods and materials similar or equivalent to those described herein can be used in the practice or testing of embodiments of the invention, exemplary methods and/or materials are described below. In case of conflict, the patent specification, including definitions, will control. In addition, the materials, methods, and examples are illustrative only and are not intended to be necessarily limiting.
Implementation of the method and/or system of embodiments of the invention can involve performing or completing selected tasks manually, automatically, or a combination thereof. Moreover, according to actual instrumentation and equipment of embodiments of the method and/or system of the invention, several selected tasks could be implemented by hardware, by software or by firmware or by a combination thereof using an operating system.
For example, hardware for performing selected tasks according to embodiments of the invention could be implemented as a chip or a circuit. As software, selected tasks according to embodiments of the invention could be implemented as a plurality of software instructions being executed by a computer using any suitable operating system. In an exemplary embodiment of the invention, one or more tasks according to exemplary embodiments of method and/or system as described herein are performed by a data processor, such as a computing platform for executing a plurality of instructions. Optionally, the data processor includes a volatile memory for storing instructions and/or data and/or a non-volatile storage, for example, a magnetic hard-disk and/or removable media, for storing instructions and/or data. Optionally, a network connection is provided as well. A display and/or a user input device such as a keyboard or mouse are optionally provided as well.
Some embodiments of the invention are herein described, by way of example only, with reference to the accompanying drawings. With specific reference now to the drawings in detail, it is stressed that the particulars shown are by way of example and for purposes of illustrative discussion of embodiments of the invention. In this regard, the description taken with the drawings makes apparent to those skilled in the art how embodiments of the invention may be practiced.
In the drawings:
The present invention, in some embodiments thereof, relates to separable robust coding and, more particularly, but not exclusively, to a separable robust code for detecting errors in data strings.
A CpC code is a type of separable robust code (denoted herein a CpC code) that may be used for checking an input data string for errors to determine whether the data string is a legal CpC codeword. The information portion of the input data string is subdivided into sub-strings. Each sub-string is encoded with a respective separable robust code. The respective redundancy strings are used to generate a composite redundancy word, optionally by addition over a finite field of the respective redundancy words of the sub-strings forming the information portion. If the composite redundancy word differs from the redundancy portion of the data string, an error is detected and flagged. If the data string is a legal CpC codeword it is known that no errors are detected in the information portion of the CpC codeword.
In some embodiments, a CpC code is used to encode an information string. The information string to be encoded is sub-divided into two or more sub-strings. A respective separable robust code is used to encode each sub-string. Alternately or additionally one or more of the sub-strings is associated in a different manner with a legal codeword of the respective code as described below. Each sub-string's associated codeword includes an information portion (denoted herein an information word) and a redundancy portion (denoted herein a redundancy word). The information portion of the CpC codeword is formed by concatenating the respective information words. The redundancy portion of the CpC codeword is generated from the respective redundancy words, optionally by addition over a finite field of the respective redundancy words. Optionally, the addition over a finite field is implemented using XOR and/or XNOR operations (as it is known that: x XNOR y=x XOR y XOR 1).
The information string is not necessarily of maximal entropy. Some or all of the information string may be encoded and/or otherwise processed prior to being encoded with the CpC code. Alternately or additionally, the CpC output code word may be further encoded and/or otherwise processed.
Optionally, the data in the information string is input from a single source. Alternately, the data in the information string is provided by multiple sources and then combined into a single string. Different sources of information may provide data with different respective encodings and/or non-encoded data.
Exemplary embodiments of the invention combine different separable robust codes within for error detection or for encoding an information string. The separable codes may be of different types and/or have different lengths.
Embodiments of the invention may utilize one or more of the following types of separable robust codes:
a) Quadratic Sum (QS) code [3];
b) Punctured Square (PS) code [4,11];
c) Punctured Cubic (PC) code [5];
d) Shortened Quadratic Sum (sQS) code [14];
e) Triple Sum (TS) code [14];
f) Triple Quadratic Sum (tQS) code [14].
Using more than one type of ground code for the CpC enables easy design of codes with desired properties. These properties include but are not limited to:
a) Code dimension;
b) The length of the redundancy portion (r);
c) The maximal error masking probability (
d) Low implementation cost.
Quadratic-Sum (QS) codes, for example, have relatively low implementation cost in hardware, but are limited to a dimension which is an even multiple of the number of redundancy symbols. Optionally, not all of the robust separable codes used for CpC encoding and/or error detection are QS codes. Further optionally, only one of the robust separable codes is a QS code.
In some portions of the description, particularly those presenting an analysis and optimization embodiments of the CpC, the codes used as the basic “building blocks” for constructing a CpC are denoted “ground codes”.
It is envisioned that new separable robust ground codes will be developed in the future, and the scope of the CpC encoder and CpC checker described herein is intended to encompass all such separable robust ground codes.
Before explaining at least one embodiment of the invention in detail, it is to be understood that the invention is not necessarily limited in its application to the details of construction and the arrangement of the components and/or methods set forth in the following description and/or illustrated in the drawings and/or the Examples. The invention is capable of other embodiments or of being practiced or carried out in various ways.
For clarity, some embodiments presented herein are described for the non-limiting embodiment of a data string with an information portion subdivided into two sub-strings. As will be appreciated by a person of skill in the art, other embodiments of the method for detecting errors and/or checker and/or method of encoding and/or encoder may be generalized straightforwardly for information portions subdivided into two or more sub-strings.
Reference is now made to
As used herein the term “redundancy portion” is the redundancy segment in the input string (i.e. the data string for error detection embodiments or the information string for encoding embodiment).
As used herein the term “redundancy word” is the redundancy segment in codeword generated from a sub-string of a data string (in method for detecting errors and checker embodiments) or associated with a sub-string of an information string (in method of encoding and encoder embodiments).
In 110 a first redundancy word is generated by encoding one of the sub-strings with a first separable robust code. In 120 a second redundancy word is generated by encoding the second sub-string with a second separable robust code. For clarity,
Optionally, the method includes the preliminary step (not shown) of sub-dividing the information portion into sub-strings.
Optionally, the first and second redundancy words have equal length. Alternately, the first and second redundancy words have different lengths.
Optionally, the separable robust codes used to encode the sub-strings are the same type of code. Alternately, some or all of the separable robust codes used to encode the respective sub-strings are different types of codes.
Optionally, separable robust codes used to implement a CpC include, but are not limited to, least one of:
a) Quadratic-Sum (QS) code;
b) Punctured Square (PS) code;
c) Punctured Cubic (PC) code;
d) Shortened Quadratic Sum (sQS) code;
e) Triple Sum (TS) code; and
f) Triple Quadratic Sum (tQS) code.
Optionally, only one of the separable robust codes used to implement the CpC is a QS code.
Optionally, embodiments of the method include error correction. Further optionally, one or more of the separable robust codes is an error-correction code.
In 130 a composite redundancy word is generated from the sub-strings' redundancy words. Optionally the composite redundancy word is generated by addition of the sub-strings' redundancy words over a finite field.
In 140, the redundancy portion in the data string is compared to the composite redundancy word. If they are the same, in 150 no error is detected (i.e. flagged). If the data string's redundancy portion differs from the composite redundancy word, in 160 an error is flagged.
Optionally, the information portion includes more than two sub-strings. A redundancy word is generated for each of the sub-strings using a respective separable robust code, and the composite redundancy word is generated from all of the redundancy words. The respective lengths of the sub-strings and redundancy words may be determined by the CpC code implementation. The sub-strings may have equal lengths or different lengths. Similarly, the redundancy words may have similar lengths or different lengths.
Optionally, when an error is flagged, a data word is output. The output data word may be selected in accordance with logical rules (denoted herein error combatance logic). Examples of a data word which may be output in response to the flagged error include but are not limited to:
a) The data string at the input of the checker;
b) A function of the data string at the input of the checker;
c) A random or arbitrary data word; and
d) A pre-chosen string.
Outputting an arbitrary or random word may confuse an attacker who is expecting a correlation between the output word and the nature of the attack.
Optionally, the flag acts as a trigger for other actions such as:
a) Turning off the device;
b) Erasing a memory;
c) Replace data in a memory (e.g. with random or pre-specified data of no significance to an attacker);
d) Restart the device;
e) Delay device operation;
f) Activate an alarm;
g) Send a message to another device; and
h) Initiate processes for destruction of the device.
There are many other types of actions which may be triggered and the scope of the term “trigger other actions” is intended to encompass all such actions.
Optionally, the hardware device is one of:
a) A memory;
b) A logic circuit;
c) An integrated circuit (IC);
d) A programmable logic element; and
e) A communication device.
Optionally, the hardware device incorporates more than one of the devices listed above (e.g. a communication device which includes memories, programmable logic elements, etc.).
Optionally, the method is implemented by logic gates which operate on the data string to perform at least one of: generating the redundancy words, detecting errors and flagging detected errors.
Optionally, some aspects of the method for detecting errors in a data string are implemented by software and/or by firmware.
Optionally, the hardware device includes at least one non-transitory computer readable storage medium storing instructions and at least one processor configured to execute the instructions to generate the redundancy words and to flag detected errors.
The data string may be input by any means known in the art, in parallel and/or serially.
Optionally, the data string is read from a memory.
Optionally, the data string is read from a register.
Optionally, the data string is extracted from a data signal (e.g. a data signal received by a communication device).
Optionally, the data string is received through a data interface.
Optionally, the data string is read from a data bus in a logic circuit.
Optionally, the data string is obtained from nodes in a logic circuit (e.g. is conveyed by wires from the logic circuit nodes).
Reference is now made to
Checker 200 includes redundancy generator 210 and error detector 220.
Redundancy generator 210 generates respective redundancy words for the sub-strings which together form the information portion of an input data string. Each sub-string's redundancy word is generated by encoding the sub-string with a respective separable robust code.
Redundancy generator 210 also generates the composite redundancy word from the sub-strings' respective redundancy words.
Optionally redundancy generator 210 generates the composite redundancy word by addition over a finite field of the respective redundancy words. Further optionally, the addition over a finite field is implemented using XOR and/or XNOR gates.
Checker 200 may operate serially, in parallel or with mixed parallel/serial operation. For example, a finite field multiplier which is used in the implementation of one or more sub-codes may have serial, parallel and mixed parallel/serial implementations.
Error detector 220 flags an error when the redundancy portion of the data string differs from the composite redundancy word.
When the goal of checker 200 is to detect fault injection attacks, the input data string is typically obtained as directly as possible from the hardware element or location which is susceptible to attack. For example, if the device susceptible to attack is a memory the data string checked by checker 200 may be read directly from the memory.
Optionally, further processing of the data is performed prior to and/or in parallel with the error detection. For example, if the CpC has error correcting capabilities, the correctable errors may be corrected first and then the possibly corrected data string is input to checker 200.
Optionally, checker 200 performs one or more other functions including but not limited to:
i) Error analysis;
ii) Error correction; and
iii) Triggering actions in response to the detected error (e.g. restoring uncorrupted data to a memory device, notifying another device or a user, etc.).
The codes used to generate the sub-string redundancy words may be the same code, may all be different codes or may differ partially (i.e. some sub-strings are encoded with the same code while others are encoded with different a code or codes). Furthermore, the redundancy words may have the same or different lengths.
Optionally the checker is integrated into a hardware device. Further optionally, the hardware device includes one or more of: a memory, a logic circuit, an IC, a programmable logic element or a communication device.
Optionally, checker 200 inputs the data string in at least one of the following ways:
a) Reading the data string from a memory;
b) Extracting the data string from a data signal;
c) Receiving the data string through a data interface;
d) Obtaining the data string from nodes in a logic circuit;
e) Reading the data string from a data bus in a logic circuit; and
f) Reading the data string from a memory.
Reference is now made to
In 310 an information string formed of two or more sub-strings is input.
Optionally, the method of encoding includes the step (not shown) of separating the information string into sub-strings.
In 320 each sub-string is associated with a codeword of a respective separable robust code. Each of the associated codewords includes a respective information word and a respective redundancy word. Optional embodiments of associating a sub-string with a codeword include but are not limited to:
i) Performing a mathematical operation on the sub-string;
ii) Retrieving the codeword from a table; and
iii) Performing a mapping function to select a codeword.
In 330 a concatenated-codeword is formed. The concatenated codeword includes an information portion formed by concatenating the respective information words and a redundancy portion generated from the respective redundancy words.
Optionally, the redundancy portion is generated by addition over a finite field of the respective redundancy words within the codewords. Further optionally, the addition over a finite field is implemented using XOR and/or XNOR operations.
In 340 the concatenated-codeword is output.
The redundancy portion may be located in any location in the concatenated codeword which enables it to be extracted from the codeword without affecting the information portion. For example, the redundancy portion may precede the information portion, follow the information portion or be embedded in a known location (or locations) in the information portion.
Similarly to the error detection method (described in relation to
Optionally, at least two of the redundancy words have a different length. Alternately, all of the redundancy words have the same length.
Optionally, the hardware device includes one or more of:
a) A memory;
b) A logic circuit;
c) An integrated circuit (IC);
d) A programmable logic element; and
e) A communication device.
Optionally, the method is implemented by logic gates which operate on the data string in order to perform at least one of: inputting the information string, associating the substrings with the codewords, forming the concatenated-codeword and outputting the concatenated-codeword.
Optionally, some aspects of the method of encoding information strings are implemented by software and/or by firmware.
Optionally, the hardware device includes at least one non-transitory computer readable storage medium storing instructions and at least one processor configured to execute the instructions to: input the information string and/or associate the substrings with the codewords and/or form the concatenated-codeword and/or output the concatenated-codeword.
The information string may be input and output by any means known in the art, in parallel and/or serially.
Optionally the information string is input by at least one of;
i) Reading the information string from a memory;
ii) Extracting the information string from a data signal;
iii) Receiving the information string through a data interface;
iv) Obtaining the data string from nodes in a logic circuit;
v) Reading the information string from a data bus in a logic circuit; and
vi) Reading the data string from a memory.
Reference is now made to
Codeword associator 410 separates an information string into at least two sub-strings. Optionally, the sub-strings are input separately. Alternately or additionally, two or more of the sub-strings combined (e.g. concatenated) into single string which is sub-divided by codeword associator 410. The information string may be input by any means known in the art, in parallel and/or serially, similarly to the described above.
Codeword associator 410 associates each of the sub-strings with a codeword of a respective separable robust code. Each of the associated codewords includes a respective information word and a respective redundancy word. Codeword associator 410 generates a redundancy portion (for the concatenated codeword) from the respective redundancy words, optionally by addition over a finite field of the redundancy words. Further optionally, the addition over a finite field is implemented using XOR and/or XNOR gates.
Codeword outputter 420 outputs a concatenated-codeword. The concatenated codeword includes an information portion, formed as a concatenation of the respective information words, and the redundancy portion generated by codeword associator 410.
The separable robust codes used by codeword associator 410 may be the same code, may all be different codes or may differ partially (i.e. some sub-strings are encoded with the same code while others are encoded with a different code or codes).
The redundancy words may have the same or different lengths.
Encoder 400 may operate serially, in parallel or with mixed parallel/serial operation.
It will be appreciated that checker 200 and encoder 400 may include similar functionalities. It is noted that for a hardware system protected by a CpC code (as illustrated in
Optionally encoder 400 is integrated into a hardware device. Further optionally, the hardware device is and/or includes: a memory, a logic circuit, an IC, a logic element or a communication device.
The information string may be input and output by encoder 400 by any means known in the art, in parallel and/or serially.
Optionally the information string is input by at least one of;
i) Reading the information string from a memory;
ii) Extracting the information string from a data signal;
iii) Receiving the information string through a data interface;
iv) Obtaining the information string from nodes in a logic circuit;
v) Reading the information string from a data bus in a logic circuit; and
vi) Reading the data string from a register.
Reference is now made to
Hardware system 500 includes encoder 510 and checker 520. Encoder 510 receives a k-bits information word termed x and outputs an r-bits redundancy word termed u. The information portion and the redundant portion form a codeword c=(x,u).
The codeword may be distorted by an adversary (shown in
Reference is now made to
Reference is now made to
Embodiments of CpC-based checkers and/or encoders may be implemented in circuits, including, but not limited to:
a) An integrated circuit (IC) customized for a particular use, such as an Application-Specific Integrated Circuit (ASIC);
b) A programmable logic device intended for general-purpose use. Examples of such programmable logic devices include, but are not limited to: Field-Programmable Gate Array (FPGA), Gate Array, Uncommitted Logic Array (ULA), Programmable Logic Array (PLA), Programmable Array Logic (PAL), Complex Programmable Logic Device (CPLD), Erasable Programmable Logic Device (EPLD) and Structured ASIC.
Regular lowercase letters are used to represent scalars. Boldface lowercase letters are used to denote row vectors; e.g., x=(x1, . . . , xn) is a vector of length n, 0n denotes an all-zero vector of length n. Double stroke capital letters are used to denote an algebraic structure; e.g., q is a finite field with q elements. The field 2m is identified herein with 2
The effectiveness of security oriented codes with a deterministic encoder is measured in terms of their maximal error masking probability. The maximal error masking probability of a code C is denoted by
R(e)=|{c|c,c⊕eϵC}| (1)
enumerates the number of codewords that mask the error e. A code C is called robust if Q(e)<1 for any nonzero error e [6].
The maximal error masking probability of a systematic binary code is lower bounded by [3]:
≥max{2−k+1,2−r}, (2)
and for non binary codes by:
≥max{q−k,q−r}. (3)
A code that satisfies equality in the lower bound on Q is called optimum.
A distinction is made herein between perfect, optimum and optimal codes. Perfect robust codes satisfy equality in the bound
however, systematic codes cannot be perfect. Systematic codes follow the bounds in Eqns. 2 and 3. Codes that satisfy equality in this bound are called optimum. In some cases, this bound is not achievable; codes that minimize
The Quadratic-Sum (QS) code is an optimum robust code for the case where k=2sr and q is a prime. The Punctured Square (PS) code is also an optimum robust code for any r≤k where q is an odd prime. The Punctured Cubic (PC) code is an optimum code for some values of r and close to optimum for others.
Punctured codes (e.g. PS/PC codes) may be constructed for arbitrary values of k and r; however, their hardware implementation cost is relatively high, as it requires a (punctured) multiplication and squaring in the finite field q
In addition to these two codes, other codes such as the Shortened QS (sQS), the Triple QS (tQS) and the Triple Sum (TS) exist. These codes are variants of the QS code [14]. The sQS code may be constructed for an arbitrary rate; however, its error masking probability is relatively high and in some cases, it is not robust. The tQS code is a non-binary optimum robust code for k=(2s+1)r, and the TS is a binary close to optimum robust code for k=(2s+1)r.
The Code plus Codes (CpC) coding scheme described herein is a high-rate low-complexity robust code built upon a set of systematic robust codes {Ci}1≤i≤l of dimension ki, and having ri redundant symbols. Optionally, the ki's are chosen to minimize the hardware complexity.
For clarity, in this non-limiting analysis systematic code C(n,k) is associated with a systematic code C′(n′, k) whose codewords are derived from C by appending n′−n zeros to each codeword; i.e.,
C′={(x,u′)u′=(u,0n′−n),n′>n and (x,u)ϵC}.
Denote by R′(e), Q′(e) and
C
i(ni,ki)q={(x,u):xϵqk
be a set of l robust codes, each with ki information symbols and ri redundancy symbols and length ni=ki+r1. The maximal error masking probability of Ci is denoted by
Define r=max1≤i≤lri and k=Σi=1lki. Denote by C′i(ki+r,ki) the corresponding zero-padded codes. The CpC code C(n=k+r,k)q consists of the codewords:
Theorem 1 The CpC code C is a robust code with:
Let c=(x1, . . . , xl, u)ϵC be a codeword and let e=(ex, eu) be a nonzero error vector, where ex=(ex
First, note that
The error masking equation of the CpC code is:
If ex=0k and eu=0r, no error occurred, and hence R(e)=qk and Q(e)=1.
If ex=0k and eu≠0r, then Q(e)=0.
For ex≠0k, define ej=(ex
For any fixed value of {xi}i≠t the error masking equation of C′t becomes
Define et=(ex
x vectors solve the error masking equation of the CpC code. Consequently, the error masking probability of the CpC code is upper bounded by:
Corollary 1 the CpC Code is Optimum if all the l Ground Codes {Ci}1≤i≤l are Optimum Codes.
Using the CpC coding scheme, several codes may be combined to produce a low complexity robust code for any (k,r) pair. The ground codes may be the QS, PC, PS, sQS, tQS, TS codes or possibly other robust codes.
Consider the case where q=3, k=23 and the desired maximal error masking probability is
3
r
3
23
3
12
3
11
3
8
3
12
Consider the case where q=2, k=32 and the desired maximal error masking probability is
2
10
2
32
2
16
2
11
2
12
2
16
Optionally, the implementation costs of a particular CpC code are calculated based on the property that any code is either a ground code or a CpC code, and a CpC code may be represented as a sum of two ground codes of smaller dimension, which themselves may be either a CpC code or ground code.
A description of the implementation cost of the QS, TS, PC and sQS codes in terms of the number of two-input AND and XOR gates is now presented. As described below, the respective implementation costs of these ground codes may be used to calculate the overall implementation cost of a particular CpC code constructed from these ground codes.
The following notations are used:
W(C) is the implementation cost of the code's encoder,
XOR and AND are respectively the implementation costs of two-input XOR and AND gates,
SQR(m) is the implementation cost of a module which computes x2 over 2m,
MUL(m) is the implementation cost of a finite field multiplier over 2
pMUL(m,mout,Sp) is the implementation cost of a punctured multiplier; i.e., a multiplier over 2m which generates only mout output bits (out of the m bits), where the set of unused output bits is defined by Sp,
sMUL(m, z1, z2) is the implementation cost of a shortened finite field multiplier; i.e., a multiplier over 2m whose first and second operands have respectively z1 and z2 zeros at predefined (fixed) coordinates.
W(C)=Σi=1lW(Ci)+(Σi=1lri−r)XOR. (6)
The QS code is an optimal robust code for k=2sr. The QS code is defined as:
C
QS={(x,u):xϵ2
where x=(x1, x2, . . . , x2s), xi ϵ2
W(QS(n,k))=s·MUL(r)+(s−1)·r·XOR.
The TS code is a close to optimal robust code for k=(2s+1)r with
where, x=(x1, . . . x(2s+1)), xi ϵ2
The implementation cost of the TS code is given by:
W(TS(n,k))=(s+1)·MUL(r)+(s−1)·r·XOR.
The PC code is a close to optimal robust code with
C={(x,u)|xϵqk,u=x3Pϵqr}
where P is a binary k×r matrix of rank r≤k and the Hamming weight of each row in P is 1.
The implementation of the PC code consists of a punctured multiplier and a block that computes x2 over 2
The implementation cost of the PC code is given by:
W(PC(n,k))=SQR(k)+pMUL(k,r,Sp).
The sQS is a modification of the QS code for cases when k=2sr−Δ, 0<Δ<2r. A sQS code is constructed by embedding Δ zeros into the information portion {tilde over (x)}ϵq{tilde over (k)} to form xϵq2sr and calculating the redundancy u(x) of a QS code. A codeword c=({tilde over (x)},u(x))ϵsQS is a vector of length k+r.
Denote the number of embedded zeros in xi by hi and define
sQS=2−r+
Hence, the error masking probability is minimized when
equivalently,
Δ=2s·
where τ<s and δs=Δ mod 2. In this case, hi=
W(sQS(n,k))=(s−τ−δs)·sMUL(k,
Note that if Δ<2s−1, the implementation employs both finite field multipliers and shortened finite field multipliers (i.e. sMUL(k,0,0)=MUL(k)).
A finite field multiplier over 2k is a hardware component which receives two inputs a, bϵ2
Multiplication in a simple parallel multiplier is done in two steps [18]. The first step is the multiplication of two polynomials a=Σi=0k−1aixi, b=Σi=0k−1bixi. The result is a polynomial ŝ of degree ≤2 (k−1),
ŝ=Σ
j=0
2(k−1)
ŝ
j
x
j
where
ŝ
j=Σ(i
and
Ŝ
j={(ia,ib)|ia+ib=j,0≤ia,ib<k}. (8)
Note that the number of gates that are required to implement ŝj, 0≤j<k is
The second step is a reduction modulo π(x),
Σi=0k−1sixi=Σj=02(k−1)ŝjxj mod π(x). (10)
Let dj be the binary representation of xj+k mod π(x) in 2k and let Rj be the support of dj [12]. Let:
M
i={|0≤j<k−1 and iϵRj},
be the set that defines which Ŝj's are used in the calculation of si. That is, for 0≤i<k, each output coordinate, s1, is computed as the sum of:
s
i
=ŝ
i⊕ΣjϵM
Using these notations, define W(si),
W(si)=W(ŝi)+|Mi|XOR
W(si) is the implementation cost of si excluding the number of two-input gates required to implement the coefficients ŝj of the high powers of ŝ, k≤j≤2(k−1).
The total cost of a finite field multiplier is then
In some cases it is possible to reduce the implementation cost of step 2 [20]. This leads to:
MUL(k)≤k2 AND+(k−1)(k+p−2)XOR (11)
where p is the number of nonzero terms in π(x) [18].
Reference is now made to
In this example, s2=(a0b2⊕a1b1⊕a2b0)⊕ŝ4. Hence, W(s2)=W(ŝ2)+|M2|=3AND+3XOR. Here, MUL(3)=9AND+8XOR.
A punctured finite field multiplier is a multiplier that outputs a subset of the product bits. The set of coordinates (i.e., the sj's) that are punctured is denoted as Sp. The hardware complexity of a punctured multiplier is
pMUL(k,r,Sp)=MUL(k)−Δ(Sp)
where Δ(Sp) is the number of gates removed from the design because of the puncturing.
The encoder of a PC code includes a punctured multiplier. The size of Sp in this multiplier equals k−r, and the elements in Sp are determined by the code's puncturing matrix P. Since the error masking probability of the PC code does not depend on the choice of P it may be chosen in a way that minimizes the implementation cost.
Reference is now made to
The following multiplier is considered optimal since it has the smallest possible hardware complexity:
Δ(Sp)=(k−r)·rAND+(k−r)·rXOR.
No optimal constructions for optimal punctured multipliers over fields that cannot be defined by trinomials are currently known. A naive puncturing of the k·r most significant bits of the product, denoted by SPMSB decreases the hardware complexity by [12]:
Δ(SPMSB)≥½(k+r)(k−r)AND+½(k+r)(k−r)XOR. (12)
The bound in Eq. 12 disregards the contribution of coefficients of the high powers, ŝj, k≤j<2k−1, to Δ(Sp). To evaluate Δ(Sp), consider the set Rj that was defined in Sec. 10.1. If Rj⊆Sp then ŝj+k is not implemented in the punctured multiplier.
For example, in the punctured multiplier in
Consider a set
{circumflex over (R)}
v=∪jϵsupp(v)Rj,
for vϵ2k−1. For instance, in the punctured multiplier in
Corollary 2 if {circumflex over (R)}v ⊆Sp then for all jϵsupp(v), ŝj+k is not Implemented.
As a result,
Let T={t0 . . . tk−1} be an ordered set of indices that contains a permutation of k such that W(st
Corollary 2 enables us to consider a non-naive solution; Algorithm 1, presented below, is a recursive greedy algorithm that receives a (k,r) pair and outputs an optimal puncturing set denoted by Sp*. The algorithm uses the predefined set
U
k−r
={{circumflex over (R)}
v
:|{circumflex over (R)}|=k−r}.
The time complexity of Algorithm 1 is (|Uk−r|). It has smaller time complexity than a naive algorithm ((2k)), which computes Δ(SP) for all the possible puncturing sets Sp. Note that for small fields (k≤16) defined by pentanomials, the puncturing sets produced by this algorithm are identical to those obtained by exhaustive search.
A shortened finite field multiplier is used to implement the encoder of the sQS code. Since in each operand some of the input bits are shortened (i.e., set to be zeros), its implementation cost may be reduced by carefully choosing the coordinates of these bits.
Let Ha and Hb, respectively, be the set of shortened coordinates of the k-bit operands a and b, |Ha|=ha<k and |Hb|=hb<k. In general,
sMUL(k,ha,hb)=MUL(k)−NANDAND−NXORXOR,
where NAND and NXOR are the numbers of AND and XOR gates that are not implemented, respectively. Since the implementation of a finite field multiplier involves Eq. 7 (i.e. the first step of the computation), the computation of ai·bj for all 0≤i, j<k is part of a multiplier. Shortening ha bits of one operand and hb bits of the second leaves us with NAND=(k−ha)(k−hb) products. Note that the position of the shortened bits, does not affect the value of NAND.
Similarly, each input coordinate contributes to at least k−1 XOR gates in the implementation of Eq. 7; i.e., in step 1 of the computation. However, each coordinate in Ha, Hb has a different effect on the implementation cost of Eq. 10 (i.e., the second step of the multiplication). That is, NXOR=NXOR,1+NXOR,2 where:
N
XOR,1=(k−(ha−1))(k(hb−1)).
Since the values of NAND and NXOR,1 do not depend on the choice of Ha, Hb, the choice of Ha, Hb, depends solely on maximizing NXOR,2, which is affected by π(x).
Let:
H
a,b={(ia,ib)|iaϵHa or ibϵHb}
be the set that corresponds to all the omitted AND gates. The size of Ha,b is NAND, and is independent of the choice of Ha, Hb; however, its content varies and it has an impact on NXOR,2. Let:
J
s
={j|k≤j<2k−1 and Ŝj⊆Ha,b},
that is, jϵJs, if ŝj is not used in step 2 of the computation. In fact, si=ŝi+ΣjϵM
Theorem 2 The implementation cost of the sets Ha={i:k−1−ha<i≤k−1}, Hb={i:k−1−hb<i≤k−1} is less than or equal to the implementation cost of any other pair of sets. In this case Js={j|2k−ha−hb≤j≤2k−2}.
Proof:
First note that at most ha+hb pairs may be removed from Ŝj. Thus, any Ŝj greater than ha+hb in size cannot be contained in Ha,b. Following Eq. 9,
J
s
⊆{j:2k−2−ha−hb≤j≤2k−2},
that is:
|Js|≤ha+hb. (13)
The minimal cost is achieved when the size of Js is maximal and equality holds in the Eq. 13. Using the definition of Ŝj, equality holds if for each element in {j|2k−2−ha−hb≤j≤2k−2}, and for each (ia,ib)ϵŜj, either ia ϵHa or ib ϵHb. Notice that Ha={i:k−1−ha<ia≤k−1}, Hb={i:k−1−hb<ib≤k−1} satisfies this restriction and provides the maximal Js set.
Step 2 of the multiplication requires the addition of ŝj+k to the coordinators in Rj, if it is used in the shortened multiplier. If Ha and Hb are chosen according to Th. 2, then none of the ŝj's for which 2k−2−ha−hb≤j≤2k−2 are implemented. Hence, step 2 may be implemented using Σj=k2k−2−h
Denote by p the number of terms in π(x). The bound from Eq. 14 may be further improved by implementing a shortened multiplier such that:
Reference is now made to
This hardware component implements a2 mod π(x)=(ak−1x2(k−1)+ak−2x2(k−2)+ . . . a1x2+a0) where aϵ2
In the optional embodiments presented below, the goal is to find a code that minimizes the hardware complexity for a given number of information bits k and whose maximal error masking probability is at most Qs.
Denote by SC<k,Q
Alternately or additionally, other minimization criteria are used, such as minimizing the hardware complexity for a given k and r. As will be appreciated, minimizing the hardware complexity using different minimization criteria may be performed in an analogous manner.
Consider the binary codes from Example 2, with k=32 and the desired maximal error masking probability Qs=2−9. Table 3 shows the implementation cost of each construction computed using the cost functions presented above.
There are many ways to construct a CpC code for a given set of parameters. The implementation cost of each code depends upon factors including:
a. The Size of 2
In general, the larger the k, the higher the implementation cost.
For example, MUL(6)=71, therefore, a QS(60+6,60) code has W(QS(60+6,60))=5·MUL(6)+4·6=379 gates, whereas a PC code with the same parameters requires SQR(60)+pMUL(60,6,Sp*={i|6≤i≤59})=749 gates, since pMUL(60,6,Sp*={i|6≤i≤59})=719. However, as was demonstrated in Ex. 2, a smaller computation field does not necessary yield a smaller hardware overhead.
b. The Weight of π(x)
Trinomial-based multipliers have lower hardware complexity than non-trinomial based multipliers of the same degree k (and sometimes of higher degrees as well). Trinomial based punctured multipliers (with an optimal puncturing set Sp*) have the lowest hardware complexity with respect to other punctured multipliers of the same k and r.
For example, there is no irreducible trinomial for k=16. If one uses the pentanomial π(x)=x16+x12+x3+x+1, then for r=5 the best puncturing set is Sp*={iϵ16 and i≠0,7,9,10,11}, and pMUL(16,5,Sp*)=232; whereas for k=17 and the trinomial π(x)=x17+x3+1 we have Sp*={iϵ17 and i≠2,5,8,11,14} and pMUL(17,5,Sp*)=169. Consequently, W(PC(16+5,16)+sQS(9+5,9))=302 whereas W(PC(17+5,17)+sQS(8+5,8))=211.
c. Use of Optimum Codes
The QS is an optimum code; it needs only r−1 output bits to provide the error masking probability that a PC code can generate with r bits. This makes it possible to reduce the hardware complexity without increasing the maximal error masking probability.
For example, W(QS(42+7,42)+PC(11+8,11))=493 whereas W(sQS(42+8,42)+PC(11+8,11))=523 and the error masking probability of both codes is
d. The Number of Instances of the Same Code
In some cases, a CpC scheme with multiple instances of the same ground code provides a smaller implementation cost.
For example, W(PC(50+18,50))=2558 whereas W(PC(25+18,25)+PC(25+18,25))=1840 which minimizes the hardware complexity.
Another example is the case where k=16 and r=3. The sQS(16+3,16) code is constructed by shortening the QS(18+3,18) code. The original QS code is implemented using s=3 multipliers and two 3-bit adders. Since Δ=2 bits are shortened, the implementation of the sQS requires a single shortened multiplier, two multipliers, and adders. Therefore, W(sQS(16+3,16))=sMUL(3,1,1)+2·MUL(3)+2·3=45.
However, the corresponding CpC(16+3,16) code constructed from sQS(8+3,8)+sQS(8+3,8), has different properties. The ground code sQS(8+3,8) is constructed by shortening the QS(12+3,12) code (s=2, Δ=4). The implementation of sQS(8+3,8) requires two shortened multipliers and two 3-bit adders. Therefore, W(sQS(8+3,8))=2·sMUL(3,1,1)+3=13, and the CpC code requires W(sQS(8+3,8)+sQS(8+3,8))=2·13+3=29 which minimizes the hardware complexity.
An efficient algorithm that finds the code that minimizes the implementation cost of a CpC code is now presented.
Every code is either a ground code or a CPC code. Every CpC code may be represented as a sum of two or more ground codes. Alternatively, every CpC may be represented as a sum of two codes of lower dimension, where a code of lower dimension may be a ground code or a CpC code.
Optionally, the total implementation cost of a particular CpC code is derived from the respective implementation costs of all the codes which are used to implement the CpC code (i.e. ground and/or CpC codes of lower dimension). The implementation cost is calculated for all possible combinations of codes.
The goal of the optimization algorithm is to find a code with minimal hardware complexity for a given set of parameters.
In one optional embodiment, a naïve algorithm goes over all possible ground codes and CpC codes for the given set of parameters using a brute force approach which has high time complexity as the number of possible codes grows exponentially as a function of k.
Alternately or additionally, as demonstrated in Algorithm 2, a recursive dynamic approach is used. For a given set of parameters, the algorithm goes over the k possible partitions of the information portion into two sub-vectors of smaller length k1 and k2. For k1 and k2 the codes with the best implementation cost are derived recursively (i.e. by running the same algorithm for the smaller values) and/or from previously calculated values that were generated when the algorithm was running on smaller parameters. Using these values, for each of the k partitions, the best code is derived, and by comparing their respective values the CpC code with minimal hardware complexity is found. This cost may also be compared to all possible ground codes with the same set of parameters. The code (ground or CPC) which has the lowest hardware complexity is derived from this comparison.
Optionally, the total implementation cost is calculated by assigning ‘weights’ to the hardware implementation of each code and, using this weight, choosing the code with the smallest weights for a given set of parameters.
Optionally, if a new or better implementation of one of a ground code is developed, the weights are recalculated according to the new implementation and the total implementation cost is recalculated with the new weights.
The weights assigned to the different ground codes may depend on the logic system being used. For instance, in the examples above the hardware cost for the ground was based on an implementation using XOR and AND gates. When a different logic system is used, the weights are computed accordingly and then the optimization may be rerun.
The respective weightings of the ground codes may also depend on the minimization criteria being used.
Optionally, the optimization costs are calculated recursively (e.g. as in Algorithm 2 below).
As noted above, CpC code and in particular C, is either a ground code or a CpC code, and a CpC code may be represented as a sum of two ground codes of smaller dimension, which themselves may be either a CpC code or ground code. Namely,
where r1 is the number of redundancy symbols of code C<k−i,Q
This property holds for any weight function.
An exemplary algorithm for finding optimal sets of ground codes is presented in Algorithm 2 below. Algorithm 2 may be adapted to find the codes that minimize the implementation cost for other sets of ground codes, other implementations of multipliers, etc.
Alg. 2 receives k and rs and returns the implementation cost of the code C=C<k,Q
The puncturing sets were calculated as follows: for trinomials an optimal puncturing set was used [12]; for pentanomials with k<29 Alg. 1 was used.
Tables 4A-4B show the best puncturing vectors for 3<k<29 with 1≤r≤12. Each puncturing vector is a binary vector of length k and a Hamming weight r. The i'th coordinate in this vector is 1 if i∉Sp, and 0 otherwise. The puncturing vectors are in hexadecimal representation.
Alg. 2 was implemented using MATLAB for XOR=AND=1. The polynomials table for 2≤k≤16 was taken from MATLAB standard and for larger values of k from [23]. Whenever possible, π(x) is a trinomial; otherwise, it is a pentanomial.
Examples of CpC codes constructed using Alg. 2 for 2≤k≤10 and some Qs values are given in Table 5. The following ground codes were used: The QS, PC sQS and TS codes.
Each entry in the table contains the set of parameters of the ground codes which constitutes the CpC code and implementation cost of the CpC code. For example, for k=7 and Qs=2−1 the optimal CpC code is the sum of sQS(5,3)+QS(5,4) which has an implementation cost of 6.
In summary, CpC coding may be used to construct high rate robust codes for any number of information symbols k, and any number of redundant symbols r. The CpC scheme uses several known ground robust codes to construct a new robust code with a low implementation cost. Efficient implementation of these codes was discussed and an exemplary algorithm for optimizing the hardware complexity over all possible CpC codes and ground codes was presented.
It is expected that during the life of a patent maturing from this application many relevant robust codes, separable robust codes, hardware devices, circuits, memories, and logic for combating attacks will be developed and the scope of the terms robust code, separable robust code, hardware device, circuit, memory, and error combatance logic is intended to include all such new technologies a priori.
The terms “comprises”, “comprising”, “includes”, “including”, “having” and their conjugates mean “including but not limited to”.
The term “consisting of” means “including and limited to”.
The term “consisting essentially of” means that the composition, method or structure may include additional ingredients, steps and/or parts, but only if the additional ingredients, steps and/or parts do not materially alter the basic and novel characteristics of the claimed composition, method or structure.
As used herein, the singular form “a”, “an” and “the” include plural references unless the context clearly dictates otherwise. For example, the term “a compound” or “at least one compound” may include a plurality of compounds, including mixtures thereof.
Throughout this application, various embodiments of this invention may be presented in a range format. It should be understood that the description in range format is merely for convenience and brevity and should not be construed as an inflexible limitation on the scope of the invention. Accordingly, the description of a range should be considered to have specifically disclosed all the possible subranges as well as individual numerical values within that range. For example, description of a range such as from 1 to 6 should be considered to have specifically disclosed subranges such as from 1 to 3, from 1 to 4, from 1 to 5, from 2 to 4, from 2 to 6, from 3 to 6 etc., as well as individual numbers within that range, for example, 1, 2, 3, 4, 5, and 6. This applies regardless of the breadth of the range.
Whenever a numerical range is indicated herein, it is meant to include any cited numeral (fractional or integral) within the indicated range. The phrases “ranging/ranges between” a first indicate number and a second indicate number and “ranging/ranges from” a first indicate number “to” a second indicate number are used herein interchangeably and are meant to include the first and second indicated numbers and all the fractional and integral numerals therebetween.
It is appreciated that certain features of the invention, which are, for clarity, described in the context of separate embodiments, may also be provided in combination in a single embodiment. Conversely, various features of the invention, which are, for brevity, described in the context of a single embodiment, may also be provided separately or in any suitable subcombination or as suitable in any other described embodiment of the invention. Certain features described in the context of various embodiments are not to be considered essential features of those embodiments, unless the embodiment is inoperative without those elements.
Although the invention has been described in conjunction with specific embodiments thereof, it is evident that many alternatives, modifications and variations will be apparent to those skilled in the art. Accordingly, it is intended to embrace all such alternatives, modifications and variations that fall within the spirit and broad scope of the appended claims.
All publications, patents and patent applications mentioned in this specification are herein incorporated in their entirety by reference into the specification, to the same extent as if each individual publication, patent or patent application was specifically and individually indicated to be incorporated herein by reference. In addition, citation or identification of any reference in this application shall not be construed as an admission that such reference is available as prior art to the present invention. To the extent that section headings are used, they should not be construed as necessarily limiting.
Filing Document | Filing Date | Country | Kind |
---|---|---|---|
PCT/IL2017/051058 | 9/19/2017 | WO | 00 |
Number | Date | Country | |
---|---|---|---|
62397392 | Sep 2016 | US |