diff --git a/content/from-0-to-crypto-by-projects/episode-2-proof-demonstration.md b/content/from-0-to-crypto-by-projects/episode-2-proof-demonstration.md index d5cabe6..db94044 100644 --- a/content/from-0-to-crypto-by-projects/episode-2-proof-demonstration.md +++ b/content/from-0-to-crypto-by-projects/episode-2-proof-demonstration.md @@ -1,5 +1,5 @@ --- -title: "Episode 2: Reversing cryptography algorithm made to be unreversables (checksum). Method by mathematical proof: disproof" +title: "Episode 2: Reversing cryptography algorithm made to be unreversable (checksum). Method by mathematical proof: disproof" date: 2024-10-13T1:25:30+02:00 weight: 2 draft: false @@ -11,8 +11,11 @@ According to the documentation and as it is mentionned that type 7 is an hashing A secure hash algorithm is an hash algorithm so that for any function hash that transform the original (plaintext) value $ hased = H(plain) $ there does not exist a function $ rev(hashed) $ so that $ rev(hashed) = plain $. -## 1 - Analysis under mathematical thinking +## II - Notes: +I really definitely insist on this point: `It is crucial for a cryptologist to PROOVE his statement. Not just calculating.` If you only calculate, you could reach some proprietary algorithms such as this one but you will never ever be able to code CVE exploits on modern algorithms. I insist in the point you have to read [book fo proof](https://www.people.vcu.edu/~rhammack/BookOfProof/Main.pdf) if you did not do it yet. It is to do theorem proving. + +## III - Analysis under mathematical thinking The reverse engineering of the hash of vigenere cisco has permitted to deduct the method taken by this algorithm. @@ -20,18 +23,23 @@ We could then guess that the researchers thanks then that: ![image](/gogo-s-blog-cpe/from-0-to-crypto-by-projects/episode-2-proof-demonstration/theory-behind-type7-hash.png) -The question is to proove that there exists a function $ rev(hashed) $ so that $ \forall plain [rev(H(plain)) = plain] $ then $ \forall x [x = H(plain)]$ - +The question is to proove that there exists a function $ rev(hashed) $ so that $ \forall plain [rev(H(plain)) = plain] $ then $ \forall x [x = H(plain)] $ -We intuitevely see points to split the issue into easier pieces: -The algorith treat bigrams (blocks of two opcodes) as following: -- the two opcodes are both xored to the hardcoded password. -- +## IV/ 1- solving the theorem finding a way to proove the case. +There are a lot of different method to proove a theorem. You could pick the one you prefer or the one you find easier. +The big picture is to split the proof into several cases. +There a serveral various operations including: +- splitting number between 0 and 256 to two differnt more little number (the shift: $ \ggg $ and the logical and: $ \land 0xf0 $ ). Reversable by mergingtwo numbers in a single one with same algortihm. +- adding. You could simply substract to reverse. +- doing an boolean exclusive logical or to a known password. + - as each number exclusively logically set to logical or (xored) with itself has the final value of 0 and as 0 set to logical or with another number will return this number, ![image](/gogo-s-blog-cpe/from-0-to-crypto-by-projects/episode-2-proof-demonstration/reversing-exclusive-or.png) it follows that logically set to logical or to the hardcoded password one time will change the values but logically set to logical or a second time to the same hardcoded value will change it to the original value. See [boolean algebra](https://en.wikipedia.org/wiki/Exclusive_or#Definition), and see this schems provided with the tool name `cryptool-2`. +All of these are reversables. +Then I decide to choose a proof in the form: as $ A \implies B \implies C $, then $ A \implies C $. -We now have the mathematical proof (demonstration) that the algorithm is vulnerable [in this paper]( /gogo-s-blog-cpe/from-0-to-crypto-by-projects/episode-2-proof-demonstration/latex-reverse-type7.pdf ). \ No newline at end of file +Let's check it out that [in this paper]( /gogo-s-blog-cpe/from-0-to-crypto-by-projects/episode-2-proof-demonstration/latex-reverse-type7.pdf )! \ No newline at end of file diff --git a/static/from-0-to-crypto-by-projects/episode-2-proof-demonstration/latex-reverse-type7.pdf b/static/from-0-to-crypto-by-projects/episode-2-proof-demonstration/latex-reverse-type7.pdf index a7a8ca9..d36cb4a 100644 Binary files a/static/from-0-to-crypto-by-projects/episode-2-proof-demonstration/latex-reverse-type7.pdf and b/static/from-0-to-crypto-by-projects/episode-2-proof-demonstration/latex-reverse-type7.pdf differ diff --git a/static/from-0-to-crypto-by-projects/episode-2-proof-demonstration/latex-reverse-type7.tex b/static/from-0-to-crypto-by-projects/episode-2-proof-demonstration/latex-reverse-type7.tex index e773cd9..0f6d7d0 100644 --- a/static/from-0-to-crypto-by-projects/episode-2-proof-demonstration/latex-reverse-type7.tex +++ b/static/from-0-to-crypto-by-projects/episode-2-proof-demonstration/latex-reverse-type7.tex @@ -92,10 +92,10 @@ h_{1} = 8, \\ h = \Sigma_{i=2}^{lp} \begin{cases} - ((p_i \oplus hp_{8 + i}) \ggg 4) + 0x30, & \text{if } (p_{i} \oplus hp_{i+8} \land 0xfffffff0 < 0xa0) \text{ and if } i \equiv 0 \pmod 2 \\ - ((p_i \oplus hp_{8 + i}) \ggg 4) + 0x37, & \text{if } (p_{i} \oplus hp_{i+8} \land 0xfffffff0 \geq 0xa0) \text{ and if } i \equiv 0 \pmod 2 \\ - ((p_i \oplus hp_{8 + i}) \land 0xf) + 0x30, & \text{if } (p_{i} \oplus hp_{i+8} \land 0xf < 0x0a) \text{ and if } i \equiv 1 \pmod 2 \\ - ((p_i \oplus hp_{8 + i}) \land 0xf) + 0x37, & \text{if } (p_{i} \oplus hp_{i+8} \land 0xf \geq 0x0a) \text{ and if } i \equiv 1 \pmod 2 + ((p_i \oplus hp_{8 + i}) \ggg 4) + 0x30, & \text{if } (h_{i} \oplus hp_{i+8} \land 0xfffffff0 < 0xa0) \text{ and if } i \equiv 0 \pmod 2 \\ + ((p_i \oplus hp_{8 + i}) \ggg 4) + 0x37, & \text{if } (h_{i} \oplus hp_{i+8} \land 0xfffffff0 \geq 0xa0) \text{ and if } i \equiv 0 \pmod 2 \\ + ((p_i \oplus hp_{8 + i}) \land 0xf) + 0x30, & \text{if } (h_{i} \oplus hp_{i+8} \land 0xf < 0x0a) \text{ and if } i \equiv 1 \pmod 2 \\ + ((p_i \oplus hp_{8 + i}) \land 0xf) + 0x37, & \text{if } (h_{i} \oplus hp_{i+8} \land 0xf \geq 0x0a) \text{ and if } i \equiv 1 \pmod 2 \end{cases} \\ ) \implies \nexists p[p = \mathbf{rev}(h)] \\ @@ -149,24 +149,24 @@ first byte: \\ $ 0xa0 < 0xf0 + 0x30 < y \\ $ then:\\ - -1: $ x \in { x | 0xa0 < x } \implies [y \in { y | 0xc7 < y < 0xa7 }] \\$ - -2: $ x \in { x | x < 0xa0 } \implies [y \in { y | 0xc0 < y < }] \\$ + -1: $ \forall y \in H(x), x \in { x | 0xa0 < x } \implies [y \in { y | 0x00 < y < 0xa7 }] \\$ + -2: $ \forall y \in H(x), x \in { x | x < 0xa0 } \implies [y \in { y | 0xc0 < y }] \\$ second byte: $ 0xa0 < 0x0f + 0x30 < y \\ $ - -1: $ x \in { x | x < 0x0a } \implies [y \in { y | 0x3a < y }] \\$ - -2: $ x \in { x | 0x0a < x } \implies [y \in { y | y < 0x4a }] \\$ + -1: $ \forall y \in H(x), x \in { x | x < 0x0a } \implies [y \in { y | 0x3a < y }] \\$ + -2: $ \forall y \in H(x), x \in { x | 0x0a < x } \implies [y \in { y | y < 0x4a }] \\$ Then for both of any subnumber: -$ \forall y = H(x), x \in { x | x \leq 0xa } \implies y = x + 0x30$ $\\$ +$ \forall y = H(x), x \in { x | x \leq 0xa } \implies y = x + 0x30 $ $\\$ $ \forall y = H(x), x \in { x | x > 0xa } \implies y = x + 0x37 $ $\\$ It follows: -$ \forall y = H(x), y \in { y | 0 < y \leq 0xa + 0x30 } \implies x = y - 0x30 $ then $ 0 < x < 0xa $ $\\$ -$ \forall y = H(x), y \in { y | 0 < y \leq 0xa + 0x37 } \implies x = y - 0x30 $ then $ 0xa < x < 0x13 $ $\\$ +$ \forall y = H(x), y \in { y | 0 < y \leq 0x0a + 0x30 } \implies x = y - 0x30 $ then $ 0 < x < 0x0a $ $\\$ +$ \forall y = H(x), y \in { y | 0 < y \leq 0x0a + 0x37 } \implies x = y - 0x30 $ then $ 0x0a \leq x $ $\\$ # V /communtativity: @@ -198,15 +198,15 @@ h_{1} = 8, \\ h = \Sigma_{i=2}^{lp} \begin{cases} - (((p_{i} \oplus hp_{i+8}) \lll 4) - 0x30), & \text{if } p_i < 0xa0 \text{ and if } i \equiv 0 \pmod 2 \\ - (((p_{i} \oplus hp_{i+8}) \lll 4) - 0x37), & \text{if } p_i \geq 0x0a0 \text{ and if } i \equiv 0 \pmod 2 \\ - (((p_{i} \oplus hp_{i+8}) \land 0xffffffff0) - 0x30), & \text{if } p_i < 0x0a \text{ and if } i \equiv 1 \pmod 2 \\ - (((p_{i} \oplus hp_{i+8}) \land 0xffffffff0) - 0x37), & \text{if } p_i \geq 0x0a \text{ and if } i \equiv 1 \pmod 2 + (((p_{i} \oplus hp_{i+8}) \lll 4) - 0x30), & \text{if } h_i < 0xa0 \text{ and if } i \equiv 0 \pmod 2 \\ + (((p_{i} \oplus hp_{i+8}) \lll 4) - 0x37), & \text{if } h_i \geq 0xa0 \text{ and if } i \equiv 0 \pmod 2 \\ + (((p_{i} \oplus hp_{i+8}) \land 0xffffffff0) - 0x30), & \text{if } h_i < 0x0a \text{ and if } i \equiv 1 \pmod 2 \\ + (((p_{i} \oplus hp_{i+8}) \land 0xffffffff0) - 0x37), & \text{if } h_i \geq 0x0a \text{ and if } i \equiv 1 \pmod 2 \end{cases} \\ ) \implies \forall p[p = \mathbf{rev}(h)] \\ \] -\end{flushleft} -\end{multline}\\ +\end{multline} +\end{flushleft}\\ $$ \end{document} \ No newline at end of file diff --git a/static/from-0-to-crypto-by-projects/episode-2-proof-demonstration/reversing-exclusive-or.png b/static/from-0-to-crypto-by-projects/episode-2-proof-demonstration/reversing-exclusive-or.png new file mode 100644 index 0000000..b8aeb05 Binary files /dev/null and b/static/from-0-to-crypto-by-projects/episode-2-proof-demonstration/reversing-exclusive-or.png differ