[C#] Eigen DES implementatie

Pagina: 1
Acties:

  • ThaLaw
  • Registratie: Maart 2001
  • Laatst online: 29-01-2021
Ik ben genoodzaakt een eigen DES implementatie te schrijven. De ingebouwde Crypto classes van het Framework voldoen niet, omdat ik encryptie moet kunnen doen met een (initiële) sleutel met allemaal 0-bytes, en deze weak-key staat het framework keihard niet toe.

Ik heb het boek van Scheiner en een op net gevonden C implementatie, dus dat moet lukken dacht ik. Ik heb e.e.a. geport naar C#, echter, wanneer ik een simpele byte array {1,2,3,4,5,6,7,8} wil versleutelen dan krijg ik compleet andere resultaten wanneer ik dit via mijn eigen implemenatie doe, en via het framework, ter controle. Ik gebruik de ECB methode, dus voorgaande zaken zullen geen invloed hebben op de versleuteling.

Mijn vraag is nu, even ervan uitgaande dat ik iets fout doe en het framework klopt, en met gelijke sleutels, de data exact gelijk versleuteld moet worden: Zijn er manieren om alle tussenstappen (permutaties, compressions en expansions etc.) te kunnen controleren?
Tegen de theorie heb ik alles gecontroleerd, en zou ik zeggen: het klopt!

Wanneer ik weer een decrypt doe via mijn eigen implemenatie, krijg ik wel mijn originele data weer terug, maar ik weet niet zeker of dat inhoudt dat mijn implementatie in orde is.

Hebben jullie tips voor mij hoe dit aan te pakken?

De c-code die ik heb gebruikt om op basis daarvan zelf een c# implemenatie te schrijven, staat op:
http://ubiqx.org/libcifs/source/Auth/DES.c

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Om te beginnen zou ik dan eens controleren of die C versie überhaupt de verwachtte resultaten geeft; zit die er langs dan zal je afgeleide project dus ook de mist in gaan ;) Gaat die wél goed, dan kun je met een debugger natuurlijk even langs je eigen project de intermediate stappen bekijken of er daar ergens verschillen optreden. Leuk is anders, maar het is wel pragmatisch ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Rukapul
  • Registratie: Februari 2000
  • Laatst online: 23:03
Er zijn talloze cryptolibraries te vinden onder eindeloos veel vrije licenties. Het is me dus een volstrekt raadsel waarom je het opnieuw wilt gaan doen. Desnoods maak je een wrapper om een C(++) implementatie om die vervolgens te gebruiken in C#.

Het boek van Schneier bevat overigens typo's in de source code van enkele (minimaal een, dacht IDEA) crypto algoritme.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je zou in de sources van het MONO framework kunnen kijken. Daar zit ieder geval ook een DES implementatie in die je kunt gebruiken en eventueel aanpassen.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 01-11 22:03

leuk_he

1. Controleer de kabel!

ThaLaw schreef op maandag 09 juni 2008 @ 11:01:
Ik ben genoodzaakt een eigen DES implementatie te schrijven. De ingebouwde Crypto classes van het Framework voldoen niet, omdat ik encryptie moet kunnen doen met een (initiële) sleutel met allemaal 0-bytes, en deze weak-key staat het framework keihard niet toe.
Je kiest bewust een weak key? Weet je dat heel zeker? Dat je bij toeval gegenereerde weak keys zou negeren is nog te beredeneren, maar bij een bewuste keus vraag ik me af of je wel het juiste protocol kiest. des coderen met een terugkerende sleutel?

Verder: beter lui als moe: [google=des,c# ] (die oplossing uit koders.com?) laat vooral anderen het oplossen...

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

ThaLaw schreef op maandag 09 juni 2008 @ 11:01:
omdat ik encryptie moet kunnen doen met een (initiële) sleutel met allemaal 0-bytes
Wat is dat nu weer voor geschifte vereiste? Heb/Ben je iemand met genoeg verstand van zaken om zeker te weten dat dat uiteindelijk goed uitpakt en niet tot het om zeep helpen van je encryptie leidt?

Wie trösten wir uns, die Mörder aller Mörder?


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik vermoed een klein beetje dat dit 'van buitenaf' komt; dus dat die 0-key door een andere vendor bepaald wordt/is ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
In dat geval gaat de laatste vraag van Confusion net zo hard op voor die vendor. :P
Confusion schreef op maandag 09 juni 2008 @ 11:25:
Ben je iemand met genoeg verstand van zaken om zeker te weten dat dat uiteindelijk goed uitpakt en niet tot het om zeep helpen van je encryptie leidt?
Dat hebben maar weinig mensen. En dat hoeft niet eens zo erg te zijn, want eea is gewoon een bewezen techniek, maar geef dan gewoon toe dat je het niet helemaal weet en accepteer aanbevolen parameters/vuistregels.

{signature}


  • ThaLaw
  • Registratie: Maart 2001
  • Laatst online: 29-01-2021
Allereerst bedankt voor de vele reacties :)

Ik ben inmiddels een stap verder, met behulp van deze website:
http://people.eku.edu/styere/Encrypt/JS-DES.html

Een tussenstap, namenlijk het verwisselen van de linker en rechter helften na een ronde liepen bij mij niet goed. Nu wel, dus probleem is opgelost!

Om even te reageren op de andere opmerkingen:

- Ik moet een eigen implementatie maken omdat:
  • De weak key ondersteuning vereist is
  • Het ook in .NET Micro gaat draaien, en daar is geen ondersteuning voor native unmanaged code
  • In het .Net Micro Framework alleen RSA en XTEA cryptoclasses zijn, en ik heb DES, 3DES en AES nodig.
- Ik moet een weak-key ondersteuning hebben, omdat de versleuteling bedoeld is voor de Mifare DESFire kaarten. Deze worden initieel uitgeleverd met een sleutel van 8 0-bytes. Om de kaart voor de eerste keer te coderen, MOET ik toegang krijgen tot de kaart met deze sleutel. Het handshake protocol vereist dit. Vandaar. Uiteraard begrijp ik dat weak-keys niet voor niets weak-keys heten, en zullen dan ook na initalisatie volledig gemeden worden.

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

ThaLaw schreef op maandag 09 juni 2008 @ 12:20:
- Ik moet een weak-key ondersteuning hebben, omdat de versleuteling bedoeld is voor de Mifare DESFire kaarten. Deze worden initieel uitgeleverd met een sleutel van 8 0-bytes.
Ah, op die fiets. Hmmm, dan wegen de kosten van het hebben van non-weak initiele sleutels op die kaarten blijkbaar niet op tegen het ontmoedigen van diefstal.

Wie trösten wir uns, die Mörder aller Mörder?


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Heb je al eens naar de Bouncy Castle implementatie gekeken? De code is freeware (zie licentie op website), dus je kunt ermee doen wat je wilt. Hun library draait ook op het Compact Framework en maakt geen gebruikt van unmanaged api's.

If it isn't broken, fix it until it is..


  • Laurens-R
  • Registratie: December 2002
  • Laatst online: 29-12-2024
Niemand_Anders schreef op maandag 09 juni 2008 @ 13:51:
Heb je al eens naar de Bouncy Castle implementatie gekeken? De code is freeware (zie licentie op website), dus je kunt ermee doen wat je wilt. Hun library draait ook op het Compact Framework en maakt geen gebruikt van unmanaged api's.
Hij doelt op het microframework ;) dat is niet het compact framework. Het compact framework is ontwikkeld voor de pocketpc.
Pagina: 1