An integrated circuit may implement a masked substitution box that includes a counter that generates counter values. An input mask component may generate unmasked input values based on a combination of respective counter values and an input mask value. Furthermore, a substitution function component may receive the unmasked input values and may generate output values based on respective unmasked input values and a substitution function. An output mask component may generate masked output values based on a combination of respective output values and an output mask value. The masked output values may be stored at memory elements.
|
1. An integrated circuit comprising:
a counter to generate a plurality of counter values;
an input mask component to generate a plurality of unmasked input values, wherein an unmasked input value of the plurality of unmasked input values is based on a combination of a respective counter value of the plurality of counter values and an input mask value;
a substitution function component to receive the plurality of unmasked input values and to generate a plurality of output values, wherein an output value of the plurality of output values is based on a respective unmasked input value of the plurality of unmasked input values and a substitution function;
an output mask component to generate a plurality of masked output values, wherein a masked output value of the plurality of masked output values is based on a combination of a respective output value of the plurality of output values and an output mask value; and
a plurality of memory elements to store the plurality of masked output values.
2. The integrated circuit of
3. The integrated circuit of
4. The integrated circuit of
a decoder to receive the counter values from the counter and to generate a plurality of decoded outputs, wherein a decoded output of the plurality of decoded outputs is used to enable one memory element of the plurality of memory elements to store a corresponding masked output value of the plurality of masked output values that has been generated by using a corresponding counter value of the plurality of counter values that was used to generate the corresponding masked output value.
5. The integrated circuit of
a multiplexer coupled to the memory elements and to receive a selection signal and to select one of the masked output values stored at the memory elements as an output signal based on the selection signal matching a respective decoded output of the plurality of decoded outputs that was used to enable one of the memory elements.
|
This application claims the benefit under 35 U.S.C. § 119(e) of U.S. Provisional Application 62/382,655 filed on Sep. 1, 2016, which is hereby incorporated by reference.
The present disclosure will be understood more fully from the detailed description given below and from the accompanying drawings of various implementations of the disclosure.
Aspects of the present disclosure are directed to implementations of a hardware masked substitution box (S-box). In general, a substitution box may receive an input and may provide an output that corresponds to the received input. For example, the substitution box may translate or map each input value to another output value. When the substitution box receives an input value, a corresponding output value is transmitted by the substitution box. As a result, the substitution box may provide the output value as a substitute for the received input value.
The substitution box may be implemented in an integrated circuit and may be used during the performance of a cryptographic operation. The performance of the cryptographic operation may result in the susceptibility of the integrated circuit to a side channel attack where an attacker of the integrated circuit may obtain secret information as the cryptographic operation is performed. An example of a side channel attack includes, but is not limited to, Differential Power Analysis (DPA) where the attacker who seeks to obtain a secret key or other such secret information used in the cryptographic operation may study the differences in power consumption of the integrated circuit that includes the substitution box as the cryptographic operation is performed. Such an attacker may be an unauthorized entity that may obtain information of the cryptographic operation by analyzing power consumption measurements of the integrated circuit that includes the substitution box over a period of time. Accordingly, when the cryptographic operation is performed, the attacker may be able to retrieve secret information (e.g., a secret key) that is used during the cryptographic operation.
Masking may be used to obfuscate or hide an input value to the substitution box that is used during the cryptographic operation with random data and then the cryptographic operation may be performed with the masked input value. Such masking may render the intermediate states or values of the cryptographic operation indistinguishable from random data when an attacker of the integrated circuit observes power consumption of the integrated circuit when performing the cryptographic operation. As an example, the substitution box of the integrated circuit may receive the masked input value and the mask value (e.g., the random value that is combined with the input value to generate the masked input value) and may translate or map the masked input value to a masked output value. Such a combination of the masked input value and the mask value used by the substitution box may reduce the susceptibility of the integrated circuit that includes the masked substitution box to a side channel attack.
Aspects of the present disclosure address the above and other deficiencies by implementing a hardware masked substitution box that reduces the susceptibility of the masked substitution box to a side channel attack. An architecture of the masked substitution box may be a table-based masked substitution box. For example, a hardware implementation of the masked substitution box may independently operate (e.g., in time and in space) on the masked input value and the mask value so that the side channel leakage (e.g., observable power consumption correlating the inputs and/or outputs) may be minimized as the masked input value and the mask value are not combined in the masked substitution box. In some embodiments, the masked substitution box may first operate on the masked value to generate a substitution function (or substitution table) based on the masked value. The substitution function may map or translate an input value to an output value where the output values for the input values may be based on the mask value. Subsequently, the hardware substitution box may receive the masked input value and may translate or map the masked input value to the output value by using the substitution function that was previously generated by using the masked value. As a result, the operations of the masked substitution box independently operate on the mask value (e.g., at a first time to generate the substitution function) and the masked input value (e.g., at a second time after the substitution function has been generated). Further details with regards to such an implementation of a masked substitution box are described in conjunction with
The architecture 100 may be a substitution box that receives a six-bit input and provides a four-bit output or any other type of substitution box. The substitution box may be used with the Data Encryption Standard (DES) or Triple Data Encryption Standard (TDES) cryptographic operations. As such, a six-bit input may be mapped or translated to a four-bit output that is used in the DES cryptographic operation. The mapping of the six-bit inputs to four-bit outputs may result in a substitution table (e.g., a matrix) with repeated entries as outputs for certain inputs. Such a mapping where certain entries in the substitution table are not unique relative to other entries in the substitution table may result in a susceptibility to a side-channel attack. The architecture 100 may reduce the susceptibility of an integrated circuit to a side-channel attack by using an architecture to program a substitution table based on the mask value and then subsequently generate an output value based on a masked input value so that the mask value and the masked input value are not concurrently operated on by the substitution box. Such a separation between the mask value and the masked input value may reduce the susceptibility of the substitution box to a side-channel attack.
As shown in
The first portion may include a random counter 111, exclusive-or (XOR) components 112 and 114, substitution box 113, and a binary decoder 115. The random counter 111 may generate a random series of values between an initial value and a final value. For example, the random counter 111 may generate each value between and including a first value and the final value at varying or random sequences. For example, the values generated by the random counter 111 may not be in incrementing or decrementing order (e.g., a first value may be generated first followed by a second value that is higher than the first value and then a third value that is lower than the second value may be generated). Thus, the random counter 111 may output each value for an entry of a substitution function in a random order. For example, for a 6-input substitution function, the random counter 111 may generate each six-bit value. The random counter 111 may be coupled with an XOR component 112. For example, the outputs of the random counter 111 may then each be combined with an input mask 131 by the XOR component 112. The output of the random counter may be considered a masked input data. In some embodiments, the number of bits of the input mask (e.g., six bits) may be equal to the number of bits of the output of the random counter 111. The use of the random counter 111 may reduce the susceptibility of an integrated circuit to a side-channel attack during the programming or generating of the substitution table.
The XOR component 112 may be coupled to a substitution function 113. For example, the output of the XOR component 112 may be provided to the substitution function 113. In some embodiments, the substitution function 113 may input values to output values (e.g., a function that replaces an input value with a corresponding output value). For example, the substitution function 113 may be a predefined substitution box. Thus, the combination of the output of the random counter 111 and the input mask 131 may be mapped to a particular output value that is defined by the substitution function 113 that provides the mapped output value. In some embodiments, the substitution function 113 may be selected from multiple substitution functions. For example, a different substitution function 113 may be selected for a particular stage of a cryptographic operation that is to be performed. In some embodiments, the cryptographic operation may be a DES cryptographic operation that uses eight different substitution functions, and a different substitution function 113 may be selected to be used for each of the different stages of the DES cryptographic operation. For example, at a first time, a first substitution function may be used to provide the values of the entries of a masked substitution box and at a second time a second substitution function may be used to provide the values of the entries of the masked substitution box. Thus, the architecture may include multiple substitution function 113 that may each be separately used for different cryptographic operations.
Furthermore, the substitution function 113 may be coupled with another XOR component 114. For example, the output value of the substitution function 113 may be combined with the output mask value 132 by the XOR component 114 to generate a masked output value 133. Thus, each input value for each entry of the substitution function 113 may be provided by the random counter 111, combined with the input mask, and the result may then be mapped from an input value of the substitution function 113 to an output value of the substitution function 113 that is combined with an output mask value to generate another output value for an entry of a masked substitution box.
The masked output value 133 of the substitution function 113 may then be stored at a memory element 121 of the second portion of the architecture 100. For example, the masked output value 133 may be stored at a flip-flop or register of the second portion. The masked output value 133 may be stored at a latch, static random access memory (SRAM), or any other memory component or device. In some embodiments, an output of the binary decoder 115 may be used to store the masked output value 133 at a particular memory element 121 of multiple memory elements of the second portion. For example, the output of the binary decoder 115 may be used to enable one of the memory elements 121 of the second portion of the architecture 100 while not enabling the rest of the memory elements. Thus, the output of the binary decoder 115 may allow a masked output value 133 to be stored at one of the memory elements 121. The second portion may further include a multiplexer 122 that receives a selection signal 134 that is used by the multiplexer 122 to select a masked output value stored at one of the memory elements 121 as the masked output 135. For example, the binary decoder 115 may receive the masked input data corresponding to the random values from the random counter 111 and may use the received random value to enable one of the memory elements 121 to store the resulting masked output value 133 that is generated for the received random value. Similarly, for each subsequent random value, the binary decoder 115 may receive the subsequent random value and may use the subsequent random value to enable another one of the memory elements 121 to store another resulting masked output value that is generated for the subsequent random value. The multiplexer 122 may subsequently receive the selection signal 134 that corresponds to the random value to enable the corresponding memory element 121 that stores the masked output value 133 that was previously generated by using the random value from the random counter 111. Thus, the value of the selection signal 134 may be considered the input of a masked substitution box and the output from the multiplexer 133 that is stored at the selected memory element 121 may be considered the mapped output of the masked substitution box.
In operation, the first portion of the architecture 100 may program the values for entries of a substitution box into the memory elements of the second portion of the architecture 100. For example, the random counter 111 may provide each value for an entry of the substitution box and a resulting output for each entry of the substitution table may be generated. The output for each input entry may be stored at one of the memory elements of the second portion that is selected based on the random value generated by the random counter 111. Further details with regards to the operations of the architecture 100 are described in conjunction with
As shown in
In some embodiments, the Galois LFSR 210 may not generate a value of zero (e.g., the Galois LFSR 210 may result in a locked status). Instead, a zero value may be inserted into the sequence of random values at a random point in the sequence. The insertion of the zero at a random point may contribute towards the reducing of the susceptibility of an integrated circuit to a side-channel attack where the zero value may be more easily observed in the sequence. In some embodiments, the Galois LFSR 210 may continue operating during the insertion of the zero value into the sequence to additionally contribute to reduce susceptibility to a side-channel attack. The random start signal 222 may correspond to a value that is used to choose the initial state of the random counter (e.g., the first random value that is output). The random zero signal 223 may be used to determine the position in the sequence where the zero value may be inserted.
As such, the random counter may generate a sequence of random values based on a selection of one of multiple polynomial values and the insertion of a zero value into the sequence of random values based on a signal used to determine the position of the zero value in the sequence of random values. In some embodiments, the random counter may further generate the sequence of random values based on another signal (e.g., another random value) that may be used to determine where in the sequence of random values to begin generating the random values of a particular sequence of random values that corresponds to one of the polynomial values 221.
As shown in
As such, a random counter may provide a sequence of random masked input values to be used as an input for a substitution function that provides corresponding outputs for each of the random masked input values. The corresponding outputs may each then be used to store a subsequent masked output value for a substitution box in a memory element. Furthermore, the corresponding memory elements that are used to store each of the subsequent masked output values for each of the random masked input values of the sequence may each be separately selected by using the random masked input value that was used to generate the corresponding masked output value by the substitution function. Thus, masked output values of the substitution box may be stored in memory elements. Each of the memory elements may store one of the masked output values. A particular masked output value stored at a particular memory element that was selected by the random masked input value may be provided when the random masked input value matches a subsequently received input value (e.g., the particular memory element was enabled by the random masked input value to store the corresponding masked output value when it was generated). Thus, the random masked input value that was used to select each of the memory elements when storing the respective output values may be considered the input for an entry of the masked substitution box.
Aspects of the present disclosure may further relate to another architecture of a substitution box based on a multiplexer lookup table. For example, the architecture may include multiplexers and memory elements (e.g., registers) where the input shares (e.g., the masked input data and the mask value) are independent so that the susceptibility of an integrated circuit that includes the substitution box to a side channel attack is reduced as the combining of the input shares does not occur within the architecture of the substitution box. The architecture may include multiplexers with selection signals corresponding to the input shares and the input data to the multiplexers being hard-coded values of a substitution function. The output of the architecture may be a masked output value of a masked substitution box. Furthermore, the architecture may be designed so that a design tool (e.g., a synthesis tool or other such integrated circuit design tool) may not remove portions of the architecture and thereby increase susceptibility to a side channel attack.
As shown in
In some embodiments, the inputs of each of the multiplexers 410A to 410Z may be hard-wired or specified by the integrated circuit that includes the substitution box. Furthermore, the inputs may be associated with a constraint so that a synthesis tool or other such process may not remove portions of the architecture 400 of the substitution box during an optimization process that removes redundant portions of a design.
Referring to
Furthermore, the architecture 400 may include registers 462A to 462Z. Furthermore, although not shown, the architecture 400 may include additional registers in the data paths of the selection signals for the multiplexers 410A to 410Z and the multiplexer 420 (e.g., registers or other such memory elements in the data paths for the masked input data to each multiplexer and the masked value). The register in the masked input data signal path may receive and output the masked input data 440, the register in the mask value signal path may receive and output the mask data 450, and the registers 462A to 462Z may be in the data paths between the multiplexers 410A to 410Z and the multiplexer 420. The registers may reduce the susceptibility to the side channel attack by separating or splitting the operation of the input shares within the architecture 400. Furthermore, the input shares may be updated at different clock cycles to decrease susceptibility to a side channel attack. For example, the use of the registers may reduce glitches from propagating through the circuit and reduce the likelihood of a value that is based on the masked input data being combined with another value that is based on the mask value.
As shown in
The processing logic may also receive a mask value (block 530) and select one of the masked output values based on the mask value as an output for a masked substitution box (block 540). For example, another multiplexer may receive the various values from each multiplexer of the first group and may select one of the various values to be provided as a masked output of the substitution box by using the value of the mask value.
As such, a first input share (e.g., the masked input data) may be used to provide outputs from a group of multiplexers. The second input share (e.g., the mask value) may be used to select one of the outputs from the group of multiplexers to be used as an output of a substitution box. The output may be a corresponding value that is mapped to the combination of the first input share and the second input share (e.g., an input value). In some embodiments, the input shares (e.g., the masked input data and the mask value) may be provided to the architecture at different times or clock cycles, and may be associated with a pre-charge cycle.
Aspects of the present disclosure may further relate to another architecture of a masked substitution box based on a multiplexer lookup table. For example, the architecture may provide a masked substitution box by using parallel substitution functions and a one-hot multiplexer structure. The architecture that is based on parallel substitution functions and the one-hot multiplexer structure may provide resistance to a side channel attack by reducing portions of an integrated circuit where input shares may be combined. For example, a first input share (e.g., a masked input data) may be received by a first portion of the integrated circuit and a second input share (e.g., a mask value) may be received by a second portion of the integrated circuit. The one-hot multiplexer structure may then be used to combine a value based on the first input share and another value based on the second input share. Thus, since the combining of the values is limited to the one-hot multiplexer structure, an analysis of the power consumption of the integrated circuit by an attacker may result in less information that may be used to retrieve or reconstruct secret information when observing power consumption as the substitution box is being used.
As shown in
In some embodiments, each of the substitution functions 610, 611, and 612 may correspond to a 4:4 substitution function that receives four-bit inputs (e.g., the input data 601) and may output a four-bit output mask value. Furthermore, the mask value for each of the substitution functions 610, 611, and 612 may also be a four-bit value. The substitution functions may perform an XOR operation between the received input data 601 and the corresponding mask value and may substitute or replace the combination of the received input data 601 and the corresponding mask value with a masked output value that is defined by the respective substitution function.
Referring to
Logic components 640, 641, 642, and 643 (e.g., Boolean OR gates and Boolean AND gates) may be used to implement a multiplexer where the masked output values from the substitution functions 610, 611, and 612 that are stored at memory elements or registers 630 correspond to inputs of the multiplexer that are selected based on a selection signal that is represented by the decoded output values that are stored at the memory elements or registers 621. The output of the logical component 643 may correspond to a masked output value of an entry of a masked substitution box.
Thus, an input value and a mask value may be received. The input value may be combined with different mask values (e.g., via an XOR or an OR operation) to map the different combinations to different output values by using substitution boxes or other such substitution functions that are implemented in parallel. The mask value may be used to generate a decoded output value that is used to select one of the outputs of the substitution boxes. The resulting output may correspond to a masked output value for a new substitution box.
In some embodiments, the memory elements or registers 621 and 630 may further reduce the susceptibility of the architecture 600 to a side channel attack by reducing propagation of glitches through the architecture 600. Furthermore, the logic of the architecture 600 may be implemented based on a secure logic style to further reduce susceptibility to a side channel attack.
As shown in
Aspects of the present disclosure may further relate to another architecture to provide a masked Data Encryption Standard (DES) substitution box that is based on one-hot decoders. The masked substitution box may be also used in TDES. Such an architecture may receive a six-bit input and provide a six-bit output that may be used for a DES cryptographic operation. The architecture of the substitution box may include one-hot decoders to receive a masked input data and an input mask to unmask the masked input data and obtain the input data that is subsequently used in a substitution function to map the input data to a particular output data. Furthermore, an encoder may then be used to encode the output data with an output mask value. The architecture of the masked DES substitution box may reduce susceptibility to a side channel attack by reducing data dependence associated with the input data and the output data. For example, the use of the one-hot decoders may provide a symmetrical structure when combining the input shares, resulting in a reduced susceptibility to a side channel attack.
As shown in
The first decoder 814 may be a 4:16 decoder that receives the four input bits of the first portion 812 of the masked input value and may provide a sixteen-bit output. In some embodiments, the sixteen bit output of the decoder 814 may correspond to a one-hot output as previously described (e.g., one of the bits is at a first value and the rest of the bits are at a different value). The second decoder 813 may be a 2:4 decoder that receives the two input bits of the second portion 811 of the masked input values and provides a four-bit output. In some embodiments, the four-bit output may correspond to a one-hot output. The output of the first decoder 814 may be stored at a first register 818 and the output of the second decoder 813 may be stored at a second register 819. In some embodiments, the output of the second decoder 813 may also be a one-hot output. In some embodiments, the first register 818 and the second register 819 may be used to reduce propagation of signals caused by glitches in the first portion of the architecture 800.
Referring to
As shown in
As shown in
As shown in
As shown in
The machine may be a personal computer (PC), a tablet PC, a set-top box (STB), a Personal Digital Assistant (PDA), a cellular telephone, a web appliance, a server, a network router, a switch or bridge, or any machine capable of executing a set of instructions (sequential or otherwise) that specify actions to be taken by that machine. Further, while a single machine is illustrated, the term “machine” shall also be taken to include any collection of machines that individually or jointly execute a set (or multiple sets) of instructions to perform any one or more of the methodologies discussed herein.
The example computer system 110 includes a processing device 1102, a main memory 1104 (e.g., read-only memory (ROM), flash memory, dynamic random access memory (DRAM) such as synchronous DRAM (SDRAM) or Rambus DRAM (RDRAM), etc.), a static memory 1106 (e.g., flash memory, static random access memory (SRAM), etc.), and a data storage device 1118, which communicate with each other via a bus 1130.
Processing device 1102 represents one or more general-purpose processing devices such as a microprocessor, a central processing unit, or the like. More particularly, the processing device may be complex instruction set computing (CISC) microprocessor, reduced instruction set computing (RISC) microprocessor, very long instruction word (VLIW) microprocessor, or processor implementing other instruction sets, or processors implementing a combination of instruction sets. Processing device 1102 may also be one or more special-purpose processing devices such as an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), a digital signal processor (DSP), network processor, or the like. The processing device 1102 is configured to execute instructions 1126 for performing the operations and steps discussed herein.
The computer system 1100 may further include a network interface device 1108 to communicate over the network 1120. The computer system 1100 also may include a video display unit 1110 (e.g., a liquid crystal display (LCD) or a cathode ray tube (CRT)), an alphanumeric input device 1112 (e.g., a keyboard), a cursor control device 1114 (e.g., a mouse), a graphics processing unit 1122, a signal generation device 1116 (e.g., a speaker), graphics processing unit 1122, video processing unit 1128, and audio processing unit 1132.
The data storage device 1118 may include a machine-readable storage medium 1124 (also known as a computer-readable medium) on which is stored one or more sets of instructions or software 1126 embodying any one or more of the methodologies or functions described herein. The instructions 1126 may also reside, completely or at least partially, within the main memory 1104 and/or within the processing device 1102 during execution thereof by the computer system 1100, the main memory 1104 and the processing device 1102 also constituting machine-readable storage media.
In one implementation, the instructions 1126 include instructions to implement functionality corresponding to the components of a masked substitution box as described in conjunction with
Some portions of the preceding detailed descriptions have been presented in terms of algorithms and symbolic representations of operations on data bits within a computer memory. These algorithmic descriptions and representations are the ways used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. An algorithm is here, and generally, conceived to be a self-consistent sequence of operations leading to a desired result. The operations are those requiring physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, combined, compared, and otherwise manipulated. It has proven convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, or the like.
It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise as apparent from the above discussion, it is appreciated that throughout the description, discussions utilizing terms such as “identifying” or “determining” or “executing” or “performing” or “collecting” or “creating” or “sending” or the like, refer to the action and processes of a computer system, or similar electronic computing device, that manipulates and transforms data represented as physical (electronic) quantities within the computer system's registers and memories into other data similarly represented as physical quantities within the computer system memories or registers or other such information storage devices.
The present disclosure also relates to an apparatus for performing the operations herein. This apparatus may be specially constructed for the intended purposes, or it may comprise a general purpose computer selectively activated or reconfigured by a computer program stored in the computer. Such a computer program may be stored in a computer readable storage medium, such as, but not limited to, any type of disk including floppy disks, optical disks, CD-ROMs, and magnetic-optical disks, read-only memories (ROMs), random access memories (RAMs), EPROMs, EEPROMs, magnetic or optical cards, or any type of media suitable for storing electronic instructions, each coupled to a computer system bus.
The algorithms and displays presented herein are not inherently related to any particular computer or other apparatus. Various general purpose systems may be used with programs in accordance with the teachings herein, or it may prove convenient to construct a more specialized apparatus to perform the method. The structure for a variety of these systems will appear as set forth in the description below. In addition, the present disclosure is not described with reference to any particular programming language. It will be appreciated that a variety of programming languages may be used to implement the teachings of the disclosure as described herein.
The present disclosure may be provided as a computer program product, or software, that may include a machine-readable medium having stored thereon instructions, which may be used to program a computer system (or other electronic devices) to perform a process according to the present disclosure. A machine-readable medium includes any mechanism for storing information in a form readable by a machine (e.g., a computer). For example, a machine-readable (e.g., computer-readable) medium includes a machine (e.g., a computer) readable storage medium such as a read only memory (“ROM”), random access memory (“RAM”), magnetic disk storage media, optical storage media, flash memory devices, etc.
In the foregoing disclosure, implementations of the disclosure have been described with reference to specific example implementations thereof. It will be evident that various modifications may be made thereto without departing from the broader spirit and scope of implementations of the disclosure as set forth in the following claims. The disclosure and drawings are, accordingly, to be regarded in an illustrative sense rather than a restrictive sense.
Trichina, Elena, Baker, Matthew Pond, Cioranesco, Jean-Michel, Hutter, Michael
Patent | Priority | Assignee | Title |
11256478, | Jun 28 2017 | THALES DIS FRANCE SAS | Method for securing a cryptographic process with SBOX against high-order side-channel attacks |
Patent | Priority | Assignee | Title |
7848514, | May 24 2004 | Malikie Innovations Limited | Table masking for resistance to power analysis attacks |
8705731, | Apr 19 2007 | MUFG UNION BANK, N A | Selection of a lookup table with data masked with a combination of an additive and multiplicative mask |
20110228928, | |||
20160127123, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Aug 09 2017 | Cryptography Research, Inc. | (assignment on the face of the patent) | / | |||
Apr 18 2018 | BAKER, MATTHEW POND | CRYPTOGRAPHY RESEARCH INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 045648 | /0923 | |
Apr 18 2018 | CIORANESCO, JEAN-MICHEL | CRYPTOGRAPHY RESEARCH INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 045648 | /0923 | |
Apr 19 2018 | HUTTER, MICHAEL | CRYPTOGRAPHY RESEARCH INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 045648 | /0923 | |
Apr 25 2018 | TRICHINA, ELENA | CRYPTOGRAPHY RESEARCH INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 045648 | /0923 |
Date | Maintenance Fee Events |
May 01 2023 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Date | Maintenance Schedule |
Oct 29 2022 | 4 years fee payment window open |
Apr 29 2023 | 6 months grace period start (w surcharge) |
Oct 29 2023 | patent expiry (for year 4) |
Oct 29 2025 | 2 years to revive unintentionally abandoned end. (for year 4) |
Oct 29 2026 | 8 years fee payment window open |
Apr 29 2027 | 6 months grace period start (w surcharge) |
Oct 29 2027 | patent expiry (for year 8) |
Oct 29 2029 | 2 years to revive unintentionally abandoned end. (for year 8) |
Oct 29 2030 | 12 years fee payment window open |
Apr 29 2031 | 6 months grace period start (w surcharge) |
Oct 29 2031 | patent expiry (for year 12) |
Oct 29 2033 | 2 years to revive unintentionally abandoned end. (for year 12) |