Welcome
Username or Email:

Password:


Missing Code




[ ]
[ ]
Online
  • Guests: 42
  • Members: 0
  • Newest Member: omjtest
  • Most ever online: 396
    Guests: 396, Members: 0 on 12 Jan : 12:51
Members Birthdays:
One birthday today, congrats!
lokeycmos (43)


Next birthdays
05/24 Simon Barsinister (63)
05/27 Daniel Davis (54)
05/29 Zonalklism (34)
Contact
If you need assistance, please send an email to forum at 4hv dot org. To ensure your email is not marked as spam, please include the phrase "4hv help" in the subject line. You can also find assistance via IRC, at irc.shadowworld.net, room #hvcomm.
Support 4hv.org!
Donate:
4hv.org is hosted on a dedicated server. Unfortunately, this server costs and we rely on the help of site members to keep 4hv.org running. Please consider donating. We will place your name on the thanks list and you'll be helping to keep 4hv.org alive and free for everyone. Members whose names appear in red bold have donated recently. Green bold denotes those who have recently donated to keep the server carbon neutral.


Special Thanks To:
  • Aaron Holmes
  • Aaron Wheeler
  • Adam Horden
  • Alan Scrimgeour
  • Andre
  • Andrew Haynes
  • Anonymous000
  • asabase
  • Austin Weil
  • barney
  • Barry
  • Bert Hickman
  • Bill Kukowski
  • Blitzorn
  • Brandon Paradelas
  • Bruce Bowling
  • BubeeMike
  • Byong Park
  • Cesiumsponge
  • Chris F.
  • Chris Hooper
  • Corey Worthington
  • Derek Woodroffe
  • Dalus
  • Dan Strother
  • Daniel Davis
  • Daniel Uhrenholt
  • datasheetarchive
  • Dave Billington
  • Dave Marshall
  • David F.
  • Dennis Rogers
  • drelectrix
  • Dr. John Gudenas
  • Dr. Spark
  • E.TexasTesla
  • eastvoltresearch
  • Eirik Taylor
  • Erik Dyakov
  • Erlend^SE
  • Finn Hammer
  • Firebug24k
  • GalliumMan
  • Gary Peterson
  • George Slade
  • GhostNull
  • Gordon Mcknight
  • Graham Armitage
  • Grant
  • GreySoul
  • Henry H
  • IamSmooth
  • In memory of Leo Powning
  • Jacob Cash
  • James Howells
  • James Pawson
  • Jeff Greenfield
  • Jeff Thomas
  • Jesse Frost
  • Jim Mitchell
  • jlr134
  • Joe Mastroianni
  • John Forcina
  • John Oberg
  • John Willcutt
  • Jon Newcomb
  • klugesmith
  • Leslie Wright
  • Lutz Hoffman
  • Mads Barnkob
  • Martin King
  • Mats Karlsson
  • Matt Gibson
  • Matthew Guidry
  • mbd
  • Michael D'Angelo
  • Mikkel
  • mileswaldron
  • mister_rf
  • Neil Foster
  • Nick de Smith
  • Nick Soroka
  • nicklenorp
  • Nik
  • Norman Stanley
  • Patrick Coleman
  • Paul Brodie
  • Paul Jordan
  • Paul Montgomery
  • Ped
  • Peter Krogen
  • Peter Terren
  • PhilGood
  • Richard Feldman
  • Robert Bush
  • Royce Bailey
  • Scott Fusare
  • Scott Newman
  • smiffy
  • Stella
  • Steven Busic
  • Steve Conner
  • Steve Jones
  • Steve Ward
  • Sulaiman
  • Thomas Coyle
  • Thomas A. Wallace
  • Thomas W
  • Timo
  • Torch
  • Ulf Jonsson
  • vasil
  • Vaxian
  • vladi mazzilli
  • wastehl
  • Weston
  • William Kim
  • William N.
  • William Stehl
  • Wesley Venis
The aforementioned have contributed financially to the continuing triumph of 4hv.org. They are deserving of my most heartfelt thanks.
Forums
4hv.org :: Forums :: General Chatting
« Previous topic | Next topic »   

AES encryption craker

Move Thread LAN_403
Andy
Sat Oct 11 2014, 12:40AM Print
Andy Registered Member #4266 Joined: Fri Dec 16 2011, 03:15AM
Location:
Posts: 874
Hi a post I wrote somewere else would like to share.

You have in theory a 256*256 array, its 256 array with a size of byte, you have "if" statments, that mean that 0x12=0x98, if you have 256*256 you have 7fff8000, which is the whole combo of 256*256 array, if you then have 16byte(128bit) you have 7fffffffffffffff800000000000000000 if add 41414141 INV you have 8000000041414140, the next instruction is and, so you create a filter start point at 0x00 and you AND 0x41414141(16bit remember),you xor 0x42424242 , which is, 8000000042424241 so its above which equals 0x3030301, kow you come to a sbox mixing function you do,0x3030301 + 7fff8000 = 83028301, after that you want to add no sub 54545454, it comes to 0x2EAE2EAD, ok, did you make the filter before, becuase you have the value 0x2EAE2EAD you sub 7fffffffffffffff800000000000000000 equals 7effffffffffffff80000002EAE2EAD, know the filter is a 41414141414141414242414141 value you AND it, and it comes out with 0x42404, so the value at the start was that.
The filter is made based on each instructiuon in the Aes code base, for eg AND instruction would be AND + AND(inverted(AND value^0x00->0xff)), OR instruction would be OR + OR(inverted(OR value^0x00->0xff))

<p>A C flowchart eg of the below code would be</p>
<p>"</p>
<p> if (keybits == 128)</p>
<p> {</p>
<p> for (;;)</p>
<p> {</p>
<p> temp = rk[3];</p>
<p> rk[4] = rk[0] ^</p>
<p> (Te4[(temp >> 16) & 0xff] & 0xff000000) ^</p>
<p> (Te4[(temp >> 8) & 0xff] & 0x00ff0000) ^</p>
<p> (Te4[(temp ) & 0xff] & 0x0000ff00) ^</p>
<p> (Te4[(temp >> 24) ] & 0x000000ff) ^</p>
<p> rcon[i];</p>
<p> rk[5] = rk[1] ^ rk[4];</p>
<p> rk[6] = rk[2] ^ rk[5];</p>
<p> rk[7] = rk[3] ^ rk[6];</p>
<p> if (++i == 10)</p>
<p> return 10;</p>
<p> rk += 4;</p>
<p> }</p>
<p> }</p>
<p>"</p>
<p>asm mov eax, rk;</p>
<p>asm mov ebx, Te4</p>
<p>asm mov temp, [eax+3*4];</p>
<p>asm mov [eax+4*3], [eax*3];</p>
<p>asm shr temp 16</p>
<p>asm and 0xff</p>
<p>asm mov Te4, [temp+ebx]</p>
<p>asm and 0xff000000</p>
<p>asm shr temp 8</p>
<p>asm and 0xff</p>
<p>asm mov Te41, [temp+ebx]</p>
<p>asm and 0x00ff0000</p>
<p>asm xor Te4, Te41</p>
<p></p>
<p>Overview</ p>
<p>7fffffffffffffff800000000000000000 rk array</p>
<p>7fff8000 Te4 array</p>

<p>7fffffffffffffff800000000000000000 + 7fff8000 = 7fffffffffffffff800000007FFF8000</ p>
<p>7fffffffffffffff800000007FFF8000 >> 16 = 7fffffffffffffff800000007f</ p>
<p>7fffffffffffffff800000007f & 0xff = 0x7f</p>
<p>0x7f + 7fff8000 = 7FFF807F</p>
<p>7FFF807F & 0xff000000 = 7F000000(store)</ p>

<p>7fffffffffffffff800000007FFF8000 >> 8 = 7fffffffffffffff800000007ff8</ p>
<p>7fffffffffffffff800000007ff8 & 0xff = 0xf8</p>
<p>0xf8 + 7fff8000 = 7FFF80F8</p>
<p>7FFF80F8 & 0x00ff0000 = FF0000(store)</p>

<p>FF0000^7F000000 = 7FFF0000</p>

<p>7fffffffffffffff800000007FFF8000 = 7fffffffffffffff800000007ff8000</ p>
<p>7fffffffffffffff800000007ff8000 & 0xff = 0x00</p>
<p>0x00 + 7fff8000 = 7FFF8000</p>
<p>7FFF8000 & 0x0000ff00 = 8000(store)</p>

<p>7FFF0000^8000 = 7FFF8000</p>

<p>etc</p>
Thanks

After the values of Parrellel logic is worked out you should have a value maybe like this
939505B079B3BBBC0BAE7E85E1D9EC39 cyper text
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Input key
BBBB0000000000000000000000000000 Input data
7fffffffffffffffffffffffffffffff80000000000000000000000000000000 Parrellel logic
816f41a6d90082c5348000007ff7ffff746f41aa1900 82c5348000007ff7ffff9257 Parrellel logic value from maths functions(AES run)
142CC4620193DFB9A626D969E307E78228FA3646F32CD5712 156ACC2CD52502C Filter for Parrellel logic worked out from (AES run)

You have cypertext and you do the below
939505B079B3BBBC0BAE7E85E1D9EC39 + 816f41a6d90082c5348000007ff7ffff746f41aa190082c534 8000007ff7ffff9257 =5.7896045e+76
5.7896045e+76(57896045000000000000000000000000000000000000000000000000000000000000000000000) & 142CC4620193DFB9A626D969E307E78228FA3646F32CD57121 56ACC2CD52502C = say 142CC4620193DFB9A626D969E307E78228FA3646F32CD57121 56ACC2CD52502C
142CC4620193DFB9A626D969E307E78228F A3646F32CD5712156ACC2CD52502 - 7fffffffffffffffffffffffffffffff80000000000000000000000000000000 =
193DFB9A626D969E307E78228FA3646F32CD571
That value is then done in reverse using the same system for a decrypt function which then should return this value
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Back to top
Hon1nbo
Sun Oct 12 2014, 10:07PM
Hon1nbo Registered Member #902 Joined: Sun Jul 15 2007, 08:17PM
Location: Pacific Northwest USA
Posts: 1042
I'd have to first go through this by hand (and I'm doing this enough with my current encryption studies and research so I'll have to set aside some time later), but this first thing I would like to point out is that you only have 128 bits of input data as well as a 128 bit key.
AES is a CBC block cipher algorithm with a 128 bit block size. **
AES uses CBC and gets its security from chaining subsequent blocks together after mixing with an Initialization Vector. If you have a piece of information that is exactly the length of your key, you might as well be using One Time Pad encryption as this is proven secure.
Before you can claim any kind of break in a CBC cipher, you have to make sure it actually applies to a full implementation of the algorithm (with the exception of the number of total rounds used, but using fewer rounds makes attacks less practical), and in this case that means using the full chained algorithm.
As well, you have a condition in which because of the lack of chaining, a system of known plaintext or chosen plaintext attacks can and will occur.

If you would like to explore this further, l I suggest you input this into a program which has at a minimum a full block size of data plus 1 block to allow for chaining, and ensure that the IV is randomized going into the system and not chosen and known by the attacker's system before hand.

Sorry if it seems rash, but also realize that even if all fails and it's bunk, it's still a good learning experience for all who take it.

Cheers,

-Jim

**EDIT: I accidentally listed AES as using a 256 bit block, this is not the case. AES uses a 128 bit block size.

Back to top
Andy
Mon Oct 13 2014, 04:21AM
Andy Registered Member #4266 Joined: Fri Dec 16 2011, 03:15AM
Location:
Posts: 874
Hi DaJJHman
Thanks for the good reply. The theory is based on one 128bit input for key and IV set to zero, the block, isn't revelent as, 7fff8000 is a array of 0x00-0xffff which is 256 array * 256byte chars per array cell(sorry might have to check if its 256*256*256, my bad), the ecb and cbc modes , keywraping etc, would be a modified filter value and ending value that gets added before the filter, saying that it shouldn't matter if its cbc as the next block, still gets added to the encryption 7f80(round about plus size) which covers all the possibility so it shouldn't matter as "
7fffffffffffffffffffffffffffffff80000000000000000000000000000000" = 16^256, but there might be some changes in the addon that could effect it.


Edit sorry wrong ways around, these numbers don't reltate to the aes algo, are just examples of the parrellel logic.
Test
7f80 = 1 byte(0x00 || 0x01 || 0x02 || 0x03 || 0x04, as loop(0xff(x)(i=i+x))
4141 + 7f80 = C0C1
C0C1 - 5367 = 6D5A
6D5A - 8888 = FFFFFFFFFFFFE4D2
FFFFFFFFFFFFE4D2 *52 = FFFFFFFFFFF74B44
Apply filter, which shouldn't have one with basic maths functions, just sub
FFFFFFFFFFF74B44 - 7f80 = FFFFFFFFFFF6CBC4
FFFFFFFFFFF6CBC4 = 0x00 with all the maths above
FFFFFFFFFFF74B44 - 7f00 = FFFFFFFFFFF6CC44
FFFFFFFFFFF6CC44 = 0x80 with all the maths above

0x7f00 = 0x7f80 - 0x80(this is the start we want to check so remove all others)
0x7f80 = 0x7f80 - 0x00
0x7f10 = 0x7f80 - (0x20& 0x50) both value we want to check

Edit 2
I think IVs are just xored with the input, have to check, but that would be a matter of generating the filter for a xor function, then adding 7fffffffffffffffffffffffffffffff80000000000000000000000000000000(size of IV input block) value xored with the step before in the Aes code.
Back to top
Hon1nbo
Mon Oct 13 2014, 12:23PM
Hon1nbo Registered Member #902 Joined: Sun Jul 15 2007, 08:17PM
Location: Pacific Northwest USA
Posts: 1042
I've updated my initial reply as AES is in fact a 128bit block size, and not 256bit. However, my point still stands that unless you are adding the Initialization Vector with a randomized value, generated by a secure RNG (or secure pRNG if required), then the AES output becomes predictable and reversible via other forms of analysis.

Having an IV of zero as a requirements for this operation means you are not attacking AES, but rather an already faulty ECB or CBC system. The purpose of the IV is to prevent a direct relationship between the key/plaintext and the resulting ciphertext that is predictable and the same for all encryption rounds which can be solved with linear or observational cryptanalysis (not even a need for differential analysis with this type of operation usually).

Also, there are some inconsistencies I've noticed going through your math here and there, such as these:

Andy wrote ...


Test
7f80 = 1 byte

^^ This is a 2 byte value, as each hexadecimal number is 4 bits

4141 + 7f80 = C0C1

^^ Where is 4141 coming from?

5367 - C0C1 = 6D5A

^^ This actually equals 0xFFFFFFFFFFFF92A6

8888 - 6D5A = FFFFFFFFFFFFE4D2

^^ This equation equals 0x1B2E, but again since there have been previous math errors this will need to be adjusted

52 * FFFFFFFFFFFFE4D2 = FFFFFFFFFFF74B44

^^ This is correct but again is based on previous incorrect values

Apply filter, which shouldn't have one with basic maths functions, just sub
FFFFFFFFFFF74B44 - 7f80 = FFFFFFFFFFF6CBC4

^^ This is correct but again is based on previous incorrect values

FFFFFFFFFFF6CBC4 = 0xff with all the maths above

^^ Explain this reasoning

FFFFFFFFFFF74B44 - 7f00 = FFFFFFFFFFF6CC44

^^ This is correct but again is based on previous incorrect values

FFFFFFFFFFF6CC44 = 0x7f with all the maths above

^^ Explain this reasoning



As well the formatting of the system makes it difficult to follow. Maybe it would help for working with you if there was a logic flow diagram.

I'd love to pick your brain on where all of this is coming from, but as a word of warning I'm currently short on time so this discussion may get drawn out quite a bit.

Regards,

-Jim
Back to top

Moderator(s): Chris Russell, Noelle, Alex, Tesladownunder, Dave Marshall, Dave Billington, Bjørn, Steve Conner, Wolfram, Kizmo, Mads Barnkob

Go to:

Powered by e107 Forum System
 
Legal Information
This site is powered by e107, which is released under the GNU GPL License. All work on this site, except where otherwise noted, is licensed under a Creative Commons Attribution-ShareAlike 2.5 License. By submitting any information to this site, you agree that anything submitted will be so licensed. Please read our Disclaimer and Policies page for information on your rights and responsibilities regarding this site.