Protecting ECC against fault attacks
10601578 ยท 2020-03-24
Assignee
Inventors
Cpc classification
H04L9/3066
ELECTRICITY
H04L2209/26
ELECTRICITY
International classification
H04L9/00
ELECTRICITY
H04L9/30
ELECTRICITY
Abstract
A method for protecting against faults in a computation of a point multiplication Q=[k]P on an elliptic curve E defined over a prime field .sub.p, including: defining an integer r and a group
={(
)|
/r
} represented with elements having a group law that coincides with a group law used in the representation for E(
.sub.p) and isomorphic to an additive group (
/r
).sup.+ through isomorphism ; forming a combined group E(
.sub.p)
E(
.sub.p)(
/r
).sup.+ which is isomorphic to a cross product of the groups E(
.sub.p) and (
/r
).sup.+; selecting an element
in
/r
and defining an element P=(
) in group
; forming a combined element {circumflex over (P)}=CRT(P,P) in the group E(
.sub.p)
; calculating {circumflex over (Q)}=[k]{circumflex over (P)} in the combined group E(
.sub.p)
; calculating k
in
/r
; and checking whether {circumflex over (Q)}Q(mod r) where Q=(k
).
Claims
1. A method for protecting against faults in a computation of a point multiplication Q=[k]P on an elliptic curve E defined over a prime field .sub.p for an elliptic curve cryptographic function in a cryptographic system, comprising: receiving, by the cryptographic system, input data; performing, by the cryptographic system, the elliptic curve cryptographic function on the input data wherein the cryptographic function is one of encryption, decryption, digital signatures, secure key exchange, and generation of public certificates and the elliptic curve cryptographic function includes the computation of the point multiplication Q=[k]P on the elliptic curve E, the point multiplication further comprising: defining an integer r and a group
={(
)|
/r
} represented with elements having a group law that coincides with a group law used in the representation for E(
.sub.p) and isomorphic to an additive group (
/r
).sup.+ through isomorphism ; forming a combined group E(
.sub.p)
E(
.sub.p)(
/r
).sup.+ which is isomorphic to a cross product of the groups E(
.sub.p) and (
/r
).sup.+; selecting an element
in
/r
and defining an element P=(
) in group
; forming a combined element {circumflex over (P)}=CRT(P,P) in the group E(
.sub.p)
; calculating {circumflex over (Q)}=[k]{circumflex over (P)} in the combined group E(
.sub.p)
; calculating k
in
/r
; and checking whether {circumflex over (Q)}Q(mod r) where Q=(k
) to indicate a fault in a point multiplication in the cryptographic function in the cryptographic system; and producing, by the cryptographic system, an output of the elliptic curve cryptographic function when no fault in the point multiplication is indicated.
2. The method of claim 1, wherein when {circumflex over (Q)}Q(mod r) output Q={circumflex over (Q)} mod p and otherwise return an error.
3. The method of claim 1, wherein is a set of points (
,1) on a twisted Edwards curve.
4. The method of claim 1, wherein is a set of points (
,1) on a Jacobi quartic curve.
5. The method of claim 1, wherein is a set of points (
,1,1) on a Jacobi quadratics intersection curve.
6. The method of claim 1, wherein is a set of points (
,1) on a Hessian curve.
7. The method of claim 1, wherein is a set of points (
,
) on a Huff curve, where
/r
.
8. The method of claim 1, wherein is a set of points (
:1:
.sup.3) on a Weierstrass curve.
9. A non-transitory machine-readable storage medium encoded with instructions for protecting against faults in a computation of a point multiplication Q=[k]P on an elliptic curve E defined over a prime field .sub.p for an elliptic curve cryptographic function in a cryptographic system, comprising: instructions for receiving input data; instructions for performing the elliptic curve cryptographic function on the input data wherein the cryptographic function is one of encryption, decryption, digital signatures, secure key exchange, and generation of public certificates and the elliptic curve cryptographic function includes the computation of the point multiplication Q=[k]P on the elliptic curve E, the point multiplication further comprising: instructions for defining an integer r and a group
={(
)
/r
} represented with elements having a group law that coincides with a group law used in the representation for E(
.sub.p) and isomorphic to an additive group (
/r
).sup.+ through isomorphism ; instructions for forming a combined group E(
.sub.p)
E(
.sub.p)(
/r
).sup.+ which is isomorphic to a cross product of the groups E(
.sub.p) and (
/r
).sup.+; instructions for selecting an element
in
/r
and defining an element P=(
) in group
; instructions for forming a combined element {circumflex over (P)}=CRT(P,P) in the group E(
.sub.p)
; instructions for calculating {circumflex over (Q)}=[k]{circumflex over (P)} in the combined group E(
.sub.p)
; instructions for calculating k
in
/r
; and instructions for checking whether {circumflex over (Q)}Q(mod r) where Q=(k
) to indicate a fault in a point multiplication in the cryptographic system; and instructions for producing an output of the elliptic curve cryptographic function when no fault in the point multiplication is indicated.
10. The non-transitory machine-readable storage medium of claim 9, wherein when {circumflex over (Q)}Q(mod r) output Q={circumflex over (Q)} mod p and otherwise return an error.
11. The non-transitory machine-readable storage medium of claim 9, wherein is a set of points (
,1) on a twisted Edwards curve.
12. The non-transitory machine-readable storage medium of claim 9, wherein is a set of points (
,1) on a Jacobi quartic curve.
13. The non-transitory machine-readable storage medium of claim 9, wherein is a set of points (
,1,1) on a Jacobi quadratics intersection curve.
14. The non-transitory machine-readable storage medium of claim 9, wherein is a set of points (
,1) on a Hessian curve.
15. The non-transitory machine-readable storage medium of claim 9, wherein is a set of points (
,
) on a Huff curve, where
/r
.
16. The non-transitory machine-readable storage medium of claim 9, wherein is a set of points (
:1:
.sup.3) on a Weierstrass curve.
17. A device for protecting against faults in a computation of a point multiplication Q=[k]P on an elliptic curve E defined over a prime field .sub.p for an elliptic curve cryptographic function in a cryptographic system, comprising: a memory; and a processor in communication with the memory, the processor configured to: receive input data; perform the elliptic curve cryptographic function on the input data wherein the cryptographic function is one of encryption, decryption, digital signatures, secure key exchange, and generation of public certificates and the elliptic curve cryptographic function includes the computation of the point multiplication Q=[k]P on the elliptic curve E, the processor further configured to: define an integer r and a group
={(
)
/r
} represented with elements having a group law that coincides with a group law used in the representation for E(
.sub.p) and isomorphic to an additive group (
/r
).sup.+ through isomorphism ; form a combined group E(
.sub.p)
E(
.sub.p)(
/r
).sup.+ which is isomorphic to a cross product of the groups E(
.sub.p) and (
/r
).sup.+; select an element
in
/r
and defining an element P=(
) in group
; form a combined element {circumflex over (P)}=CRT(P,P) in the group E(
.sub.p)
; calculate {circumflex over (Q)}=[k]{circumflex over (P)} in the combined group E(
.sub.p)
; calculate k
in
/r
; and check whether {circumflex over (Q)}Q(mod r) where Q=(k
) to indicate a fault in a point multiplication in the cryptographic system; and produce an output of the elliptic curve cryptographic function when no fault in the point multiplication is indicated.
18. The device of claim 17, wherein when {circumflex over (Q)}Q(mod r) output Q={circumflex over (Q)} mod p and otherwise return an error.
19. The device of claim 17, wherein is a set of points (
,1) on a twisted Edwards curve.
20. The device of claim 17, wherein is a set of points (
,1) on a Jacobi quartic curve.
21. The device of claim 17, wherein is a set of points (
,1,1) on a Jacobi quadratics intersection curve.
22. The device of claim 17, wherein is a set of points (
,1) on a Hessian curve.
23. The device of claim 17, wherein is a set of points (
,
) on a Huff curve, where
/r
.
24. The device of claim 17, wherein is a set of points (
:1:
.sup.3) on a Weierstrass curve.
Description
BRIEF DESCRIPTION OF THE DRAWINGS
(1) In order to better understand various exemplary embodiments, reference is made to the accompanying drawings, wherein:
(2) .sub.p.
(3) To facilitate understanding, identical reference numerals have been used to designate elements having substantially the same or similar structure and/or substantially the same or similar function.
DETAILED DESCRIPTION
(4) The description and drawings illustrate the principles of the invention. It will thus be appreciated that those skilled in the art will be able to devise various arrangements that, although not explicitly described or shown herein, embody the principles of the invention and are included within its scope. Furthermore, all examples recited herein are principally intended expressly to be for pedagogical purposes to aid the reader in understanding the principles of the invention and the concepts contributed by the inventor(s) to furthering the art, and are to be construed as being without limitation to such specifically recited examples and conditions. Additionally, the term, or, as used herein, refers to a non-exclusive or (i.e., and/or), unless otherwise indicated (e.g., or else or or in the alternative). Also, the various embodiments described herein are not necessarily mutually exclusive, as some embodiments can be combined with one or more other embodiments to form new embodiments.
(5) Elliptic curve cryptography (ECC) is an interesting alternative to Rivest-Shamir-Adleman (RSA) cryptography because the keys are much shorter for a same conjectured security level. Given a point P on an elliptic curve E and an integer k, the basic operation includes computing the scalar multiplication [k]P, that is, PP . . . P (k times) where denotes the group operation on E. The goal of an attacker is to recover the value of k (or a part thereof) by inducing faults.
(6) For RSA cryptographic systems, Shamir's countermeasure was developed. Shamir's countermeasure generalizes to elliptic curve scalar multiplication and is known as the Blomer-Otto-Seifert (BOS) countermeasure. The BOS countermeasure method is as follows.
(7) Suppose one has to compute Q=[k]P on an elliptic curve E defined over the prime field .sub.p and given by the Weierstra equation y.sup.2=x.sup.3+ax+b. 1. For a (small) prime r, define an elliptic curve E over
.sub.r and a point P on E; 2. Form the combined curve =CRT(E,E) over
/rp
and the combined point {circumflex over (P)}=CRT(P,P) (where CRT is the Chinese remainder theorem; whose application is defined below); 3. Compute {circumflex over (Q)}=[k]{circumflex over (P)} on ; 4. Compute Q=[k]P on E; 5. Check whether {circumflex over (Q)}Q (mod r), and if so, output Q={circumflex over (Q)} mod p; if not, return error.
(8) The following observations of the BOS countermeasure method are noted. If y.sup.2=x.sup.3+ax+b is the equation defining the elliptic curve E over .sub.r, CRT(E,E) denotes the elliptic curve over
/rp
given by the equation y.sup.2=x.sup.3+x+{circumflex over (b)} where =CRT(a(mod.sub.p), a(mod r)) and {circumflex over (b)}=CRT(b(mod p), b(mod r)); i.e., such that a(mod p) and a(mod r), and the same for {circumflex over (b)}. Point {circumflex over (P)} is defined similarly from the coordinates of points P and P.
(9) In a concrete implementation, prime r, curve E and point P are precomputed so that the order of point P on E, ord.sub.E(P), is maximal. The value of n:=ord.sub.E(P) together with r, the curve parameters, and point P may be stored in non-volatile memory. This presents the further advantage in that the calculation of Q in Step 4 of the BOS countermeasure method may be performed more efficiently as Q=[k mod n]P.
(10) In order to avoid a single point of failure, infective computation is preferred to implement the final test of Step 5 of the BOS countermeasure method. For example, for Step 5, one could perform the following steps instead: 5.1. compute c.sub.x=(x({circumflex over (Q)})+1x({circumflex over (Q)})) mod r and c.sub.y=(y({circumflex over (Q)})+1y(Q)) mod r, where x({circumflex over (Q)}) and y({circumflex over (Q)}) respectively denote the x- and y-coordinate of point {circumflex over (Q)} and similarly for point Q; 5.2. Choose a K-bit random integer and compute
(11)
and 5.3. return Q=[]R on E where R={circumflex over (Q)} (mod p).
It can be checked that when {circumflex over (Q)}Q(mod r), c.sub.x and c.sub.y are both equal to 1, which leads to =1. Otherwise, is a random value and the returned point Q is a random point.
(12) As discussed above, the BOS fault countermeasure method requires the prior generation and storage of a prime r, an elliptic curve E over .sub.r, and a point P on E of large order. For better performance, the order n of P should also be pre-stored.
(13) Another countermeasure is presented in Y.-J. Baek and I. Vasyltsov, How to prevent DPA and fault attacks in a unified way for ECC scalar multiplication: Ring extension method, in E. Dawson and D. Wong, editors, Information Security Practice and ExperienceISPEC 2007, volume 4464 of LNCS, pages 225-237. Springer, Heidelberg, 2006. Compared to J. Blmer, M. Otto, and J.-P. Seifert, Sign change fault attacks on elliptic curve cryptosystems, in L. Breveglieri et al., editors, Fault Diagnosis and Tolerance in CryptographyFDTC 2006, volume 4236 of LNCS, pages 36-52. Springer, Heidelberg, 2006, Baek-Vasyltsov does not require precomputed values and does not assume that the randomizer r is a prime integer. Numerical experiments conducted in M. Joye, On the security of a unified countermeasure, in L. Breveglieri et al., editors, 5th Workshop on Fault Diagnosis and Tolerance in Cryptography (FDTC 2008), pages 87-91. IEEE Computer Society, 2008, however show that a non-negligible proportion of faults is undetected and that larger bit-lengths for r should be used.
(14) More effective countermeasures are given in M. Joye, Edwards curves and fault attack, presented at the rump session of CRYPTO 2012, Santa Barbara, USA, Aug. 21, 2012, available at http://crypto.2012rump.cr.yp.to/ and S. Neves and M. Tibouchi, Degenerate curve attacksextending invalid curve attacks to Edwards curves and other models, in C.-M. Cheng, K.-M. Chung, G. Persiano, and B.-Y. Yang, editors, PKC 2016, Part II, volume 9615 of LNCS, pages 19-35, Springer, Heidelberg, March 2016. They essentially follow the same approach. The idea is to rely on a shortcut for the evaluation of Q=[k]P on E by an appropriate choice for E. In Joye, E is chosen as the subgroup of points on an elliptic curve over /r.sup.2
that reduce to 0 modulo r. In Neves-Tibouchi, E is chosen as the group of points on a degenerate curve over
.sub.r.
(15) The method in Joye presents the disadvantage that fault attacks whose detection probability depends on the order of point P implies a twice longer value for r. Indeed, the subgroup of points considered in Joye for E has order r whereas the corresponding curve is defined modulo r.sup.2. In turn, the combined curve is defined over /r.sup.2p
, which is more demanding for the evaluation of {circumflex over (Q)} on .
(16) The combined curve in Neves-Tibouchi is defined over /rp
where r is prime. However, most elliptic curve models (the Weierstra model is a notable exception) do not have an additive degeneration: they either degenerate to the (r1)-order multiplicative group
.sub.r* or to the (r+1)-order multiplicative subgroup T.sub.2(
.sub.r) of elements of norm 1 in
.sub.r.sub.
.sub.r*) or into the evaluation of Lucas sequences modulo r (degeneration to T.sub.2(
.sub.r)). Second, whereas it is easy to obtain a generator of the additive group (
/r
).sup.+, for
.sub.r* and T.sub.2(
.sub.r), the respective factorization of r1 or of r+1 is required. An easy fix is to increase the size of r so as to increase the probability that the order of P as an element of the degenerate curve E is large. The limitation on r being a (large) prime incurs computational complexity as r needs to be tested for primality.
(17) Embodiments for more efficiently implementing a countermeasure method against faults for ECC versus the BOS countermeasure method will now be described. As aforementioned, obtaining a generator of the additive group (/r
).sup.+ is fairly easy: any non-zero integer co-prime to r generates (
/r
).sup.+. Two possible strategies are: 1. Take 1 as a generator or fix a prime g larger that the maximum value for r. Then (
/r
).sup.+=
1
or (
/r
).sup.+=
g
. 2. Select r as a prime number. Then any non-zero integer 0<g<r is a generator of (
/r
).sup.+.
(18) The idea of the embodiment is to replace the combined curve in the BOS countermeasure by the group
E(.sub.p)
E(
.sub.p)(
/r
).sup.+
which is isomorphic to the cross product of the groups E(.sub.p) and (
/r
).sup.+ and where the group
is represented with elements having a group law that coincides (i.e., is compatible) with the group law used in the representation for E(
.sub.p). Such a representation for
={P=(
)|
/r
} where
(19)
can easily be identified from the group law in E. This is illustrated in the next paragraphs with several elliptic curve models commonly used for cryptographic applications.
(20) Because is selected such that (
.sub.1)(
.sub.2)=(
.sub.1+
.sub.2), this means that k(
)=(k
)=kP. This means that instead of calculating kP as a series of point additions on an elliptic curve as in the BOS method, the verification for the presence of faults can be performed from the calculation of k
. Because calculating k
is a simple arithmetic multiplication modulo integer r, it is a much more efficient calculation versus the point multiplication in the BOS method. Accordingly, Step 4 of the BOS method may be replaced by a much more efficient operation.
(21) This method is fully generic and can readily be adapted to any elliptic curve model and corresponding addition formulas. Also, although focusing on protecting elliptic curve computations over prime fields for the sake of concreteness, this method can be generalized to elliptic curve computations over arbitrary rings, including over binary fields.
(22) .sub.p. The method 100 starts 105, and then defines an integer r and a group
={(
)|
/r
} 110 represented with elements having a group law that coincides with the group law used in the representation for E(
.sub.p) and isomorphic to the additive group (
/r
).sup.+ through isomorphism . Next, the method 100 forms the combined group E(
.sub.p)
E(
.sub.p)(
/r
).sup.+ which is isomorphic to the cross product of the groups E(
.sub.p) and (
/r
).sup.+ 115. Then the method 100 selects an element
in
/r
and defines the element P=(
) in group
120. Next, the method 100 forms the combined element {circumflex over (P)}=CRT(P,P) in the group E(
.sub.p)
125. The method 100 then calculates {circumflex over (Q)}=[k]{circumflex over (P)} in the combined group E(
.sub.p)G 130. Next, the method 100, calculates k
in
/r
135. The method then checks whether {circumflex over (Q)}Q(mod r) where Q=(k
) 140, and if so, output Q={circumflex over (Q)} mod p 145, and if not, return an error 150. The method then ends at 155.
(23) Application of the above method will now be described for various elliptic curves that are used as the basis for ECC.
(24) One elliptic curve to consider is a normal form for elliptic curves in a twisted form that is referred to as the twisted Edwards form. The twisted Edwards form, is given by the equation:
E.sub..sub.
The neutral element for this curve is O=(0,1). The addition law is unified. Given two points (x.sub.1,y.sub.1) and (x.sub.2,y.sub.2), their sum (x.sub.3,y.sub.3)=(x.sub.1,y.sub.1)(x.sub.2,y.sub.2) is given by:
(25)
(26) Applying the general method above to the twisted Edwards form results in:
(/r
).sup.+
={(
)=(
,1)|
/r
}{(x,y)E.sub..sub.
/r
)}.
(27) In more detail, the group (/r
).sup.+ is viewed as the set
of points (x,1) on an Edwards curve (1) with parameters a=d=0, over the ring
/r
, equipped with the above addition law. When a=d=0, it is easily verified that:
(28)
as desired.
(29) Another elliptic curve to consider is the Jacobi quartic model. The (extended) Jacobi quartic model assumes an element of order 2. Its equation is given by:
E.sub.J.sub.
with O=(0,1) as the neutral element. The unified addition of two points (x.sub.1,y.sub.1) and (x.sub.2,y.sub.2), (x.sub.3,y.sub.3)=(x.sub.1,y.sub.1)(x.sub.2,y.sub.2), is given by:
(30)
The original Jacobi quartics correspond to the case d=k.sup.2 and 2a=1+k.sup.2 for some k.
(31) Applying the general method above using the Jacobi quartic model results in:
(/r
).sup.+
={(
)=(
,r
}{(x,y)E.sub.J.sub.
/r
)}.
As it was for the Edwards model, it is readily verified for the Jacobi quartic model that (0)=(0,1)=O and, when a=d=0, that
(32)
as desired.
(33) Another elliptic curve to consider is the Jacobi quadratics intersection model which represents an elliptic curve as the intersection of two quadrics in .sup.3. The most general form is as follows:
(34)
The neutral element is O=(0,1,1). The unified sum of two points (x.sub.1,y.sub.1,z.sub.1) and (x.sub.2,y.sub.2,z.sub.2) is given by (x.sub.3,y.sub.2,z.sub.3)=(x.sub.1,y.sub.1,z.sub.1)(x.sub.2,y.sub.2,z.sub.2) where:
(35)
(36) Applying the general method above using the Jacobi quadrics intersection model results in:
(/r
).sup.+
={(
)=(
,1,1)|
/r
}{(x,y,z)E.sub.Q.sub.
/r
)}.
(37) A simple calculation shows that (0)=(0,1,1)=O and, when a=b=0, that
(38)
as desired.
(39) Another elliptic curve to consider are the Hessian curves. Hessian curves have been generalized, modified, and extended for cryptographic applications. Using for the neutral element the point O=(0,1), the curve equation is::ax.sup.3+y.sup.3+1=dxy.(4)
The unified sum (x.sub.3,y.sub.3)=y.sub.1)(x.sub.2,y.sub.2) of two affine points (x.sub.1,y.sub.1) and (x.sub.2,y.sub.2) is given by:
(40)
(41) Applying the general method above using the Hessian curve above results in:
(42)
(43) Again, it can be verified that (0)=(0, 1)=0 and that the addition law when a=d=0 yields
(44)
as desired.
(45) Another elliptic curve to consider are the Huff curves. The most general form is given by the equation:
E.sub.H.sub.
with neutral element O=(0,0). The unified addition formula of affine points (x.sub.1,y.sub.1) and (x.sub.2,y.sub.2) is given by (x.sub.3,y.sub.3)=y.sub.1)(x.sub.2,y.sub.2) where:
(46)
(47) Applying the general method above using the Huff curve above and by fixing /r
. results in:
(/r
).sup.+
={(
)=(
,
)|
/r
}={(x,y)E.sub.H.sub.
/r
)}.
(48) The correctness is verified by observing that (0)=(0,0)=0 and, when (a,c,d)=(0,.sub.1)(
.sub.2)=(
.sub.1,
.sub.1)(
.sub.2,
.sub.2)=(
.sub.1+
.sub.2,
.sub.1+
.sub.2)=(
.sub.1+
.sub.2) as desired.
(49) The Weierstrass model is the most common way to represent an elliptic curve. It is given by the equation:
E.sub.W.sub.
or using projective coordinates it is given as:
E.sub.W.sub.
The neutral element is the point at infinity O=(0:1:0). Unified addition formulas are given by
(50)
(51) Applying the general method above using the Hessian curve above results in:
(/r
).sup.+
={(
)=(
:1:
.sup.3)|
/r
}{(X:Y:Z)E.sub.W.sub.
/r
)}.
(52) Here again, it can be verified that (0)=(0:1:0)=O and, when a=b=0, that the above addition formulas yield (.sub.1)(
.sub.2)=(
.sub.1:1:
.sub.1.sup.3)(
.sub.2:1:
.sub.2.sup.3)=(
.sub.1+
.sub.2:1:(
.sub.1+
.sub.2)3
.sub.1
.sub.2+
.sub.1.sup.3+
.sub.2.sup.3)=(
.sub.1+
.sub.2:1:(
.sub.1+
.sub.2).sup.3)=(
.sub.1+
.sub.2) as desired.
(53) The above embodiments list unified addition formulas; that is, the formulas remain valid when the input points are equal (point doubling). Depending on certain conditions (e.g., field characteristic or curve parameters), the formulas are even complete; that is, they can be used without any exception. It is worth noting that in all the previous embodiments the addition formulas are complete in . The identity (
.sub.1)(
.sub.2)=(
.sub.1+
.sub.2) is always verified. This implies that randomizer r can be used freely in the proposed method; in particular, it is not required to be prime.
(54) The methods described above may be implemented in software which includes instructions for execution by a processor stored on a non-transitory machine-readable storage medium. The processor may include a memory that stores the instructions for execution by the processor.
(55) Any combination of specific software running on a processor to implement the embodiments of the invention, constitute a specific dedicated machine.
(56) As used herein, the term non-transitory machine-readable storage medium will be understood to exclude a transitory propagation signal but to include all forms of volatile and non-volatile memory. Further, as used herein, the term processor will be understood to encompass a variety of devices such as microprocessors, field-programmable gate arrays (FPGAs), application-specific integrated circuits (ASICs), and other similar processing devices. When software is implemented on the processor, the combination becomes a single specific machine.
(57) It should be appreciated by those skilled in the art that any block diagrams herein represent conceptual views of illustrative circuitry embodying the principles of the invention.
(58) Although the various exemplary embodiments have been described in detail with particular reference to certain exemplary aspects thereof, it should be understood that the invention is capable of other embodiments and its details are capable of modifications in various obvious respects. As is readily apparent to those skilled in the art, variations and modifications can be effected while remaining within the spirit and scope of the invention. Accordingly, the foregoing disclosure, description, and figures are for illustrative purposes only and do not in any way limit the invention, which is defined only by the claims.