AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Delphi PGP auf Android und Windows

Ein Thema von Ghostwalker · begonnen am 28. Apr 2020 · letzter Beitrag vom 29. Apr 2020
Antwort Antwort
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#1

Delphi PGP auf Android und Windows

  Alt 28. Apr 2020, 11:51
Servus,

ich bin gerade am tüfteln einer Android-App für Zeiterfassung. Die App erfasst als nur Zeiten, speichert diese in einer kleinen DB. Diese Daten sollen dann an ein Windowsprogramm übertragen werden um dort ausgewertet zu werden.

Nun dacht ich mir, das es ja eine gute Idee ist, solche Daten bei der Übertragung zu Verschlüsseln und wollte dafür das PGP-Verfahren nutzen.

Trotz intensiver Suche im Netz, bin ich aber auf lediglich 2 Libs gestoßen, die die Funktionalität bieten.

Zum einen ist das IPWorks OpenPGP (was aufgrund des Preises ausfällt) und Lockbox3.

Also hab ich mir mal Lockbox3 installiert und nach einigem rumgefriggel es auch geschafft Schlüsselpaare zu generieren. Soweit ich das verstanden habe, werden ja 2 Paare generiert (ein Satz fürs signieren und einer fürs Verschlüsseln). Aber leider find ich keine Möglichkeit auf die einzelnen Schlüsselteile zu zugreifen.

Weiß hier jemand Rat ?

oder gar eine andere Alternative ?

Gruß

Ghostwalker
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Delphi PGP auf Android und Windows

  Alt 28. Apr 2020, 16:39
Hallo,
falls RSA für Dich eine Alternative sein sollte (asymetrische Chiffrierung) kann ich Dir die exeples des cn-Pack empfehlen. http://www.cnpack.org/showdetail.php?id=864&lang=en
Ich habe dieses Beispiel, dass übrigens auch mit Unterstützung der Lockbox arbeitet aus dem Chinesischen "übersetzt" und erweitert. Es gibt eine Version FMX und eine VCL.
Es gestattet die chiffrierte Übermittlung von Daten durch Bereitstellung eines öffentlichen Schlüssels. Zum RSA-Verfahren gibt es div. Beschreibungen im Netz.
Ich füge mal das fertige Programm nur zur Ansicht bei. Falls Interesse besteht bitte melden.
Angehängte Dateien
Dateityp: zip RSA_FMX.zip (3,10 MB, 9x aufgerufen)
Norbert

Geändert von EdAdvokat (28. Apr 2020 um 17:08 Uhr)
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Delphi PGP auf Android und Windows

  Alt 28. Apr 2020, 20:11
Hmm...dein Demo sieht danach aus, als wenn es genau das macht was ich mir vorstelle (zumindest zum Teil).

Wie schon beschrieben, ist das Problem mit Lockbox3 einfach, das ich die generierten Schlüssel (und hier kommt ja RSA zum Einsatz) nicht seperat ansprechen kann. Generiert werden, lt. Entwickler von LB3, 4 Schlüssel (Jeweils Public und Private für Signing und für Encryption). Aber die Komponente lässt nur zu, das ganze in einem Stream zu speichern. Hier kann ich auch nur zwischen Nur Public, Nur Private oder beides wählen. Das ist aber, einfach ausgedrückt, ein bischen blöd, wenn man das ganze in seperate Felder eine DB schreiben will (Ja..geht auch per Blob, is aber eher suboptimal).

Wäre super, wenn du mir mal den Source des Demos per PN zukommen lassen könntest
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
EdAdvokat

Registriert seit: 1. Mai 2016
Ort: Berlin
419 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Delphi PGP auf Android und Windows

  Alt 28. Apr 2020, 21:03
also die generierten Schlüssel in RSA kannst du abspeichern. Das war auch mein Problem.
Wichtig ist dass cn-pack und lockbox installiert sind, dann sollte es mit dem Programm auch klappen.
ggf. kann das Programm auch noch für Deine Zwecke erweitert werden. Ich habe das Ganze nur für mich aus Spaß an der Freunde programmiert, um zu sehen, wie es mit großen Zahlen tatsächlich funktioniert. Ja es funktioniert und ich habe es mit Freunden schon mal ausprobiert.
Angehängte Dateien
Dateityp: zip rsa3a.zip (20,7 KB, 6x aufgerufen)
Norbert

Geändert von EdAdvokat (29. Apr 2020 um 08:37 Uhr)
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#5

AW: Delphi PGP auf Android und Windows

  Alt 28. Apr 2020, 21:56
Interessantes Thema.

Wäre es technisch möglich, unter Verwendung der RSA Uterstützung von Lockbox 3,
eine Delphi App zu schreiben die als Server für ein IoT Gerät im selben TCP/IP Netzwerk
dient?
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Delphi PGP auf Android und Windows

  Alt 29. Apr 2020, 06:06
@EdAdvokat

Danke schonmal. Werd mir das dann gleich mal reinziehen.

@Turbo

Sicherlich, das Prinzip ist ja im Endeffekt das gleiche, egal ob ich nun ein Smartphone oder ein anderes Gerät nutze. Die beiden Stellen müssen lediglich ihre Public Keys austauschen und schon kannst du die Übertragungen verschlüsseln.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Delphi PGP auf Android und Windows

  Alt 29. Apr 2020, 09:19
So..laufen tuts schon mal grunsätzlich. Danke hier schonmal für die Hilfe.

Fazit:

Es werden wirklich 4 Keys erstellt. Jeweils Private und Public für Signing und Encryption/Decryption. Leider lassen sich nur Public und Private unterscheiden. Da ich das ganze in einer DB speichere, bin ich jetzt den Weg über Blob's in der DB gegangen.

Hier mal einige Codeschnippsel aus meinem Testprogramm. Ich benutz hier Lockbox3 (manuell installiert) sowie FireDAC mit einer SQLite-DB.

Generieren der Keys und Speichern in der DB:

Delphi-Quellcode:
var
  tmsPub : TMemoryStream;
  tmsPriv : TMemoryStream;

begin
  memo1.Lines.Clear;
  if (Signatory1.GenerateKeys) then
  begin
    tmsPub := TMemoryStream.create;
    tmsPriv := TMemoryStream.create;
    Signatory1.StoreKeysToStream(tmsPub,[partPublic]);
    Signatory1.StoreKeysToStream(tmsPriv,[partPrivate]);
    (* Seek streams to 0 *)
    tmspub.Seek(0,soBeginning);
    tmsPriv.Seek(0,soBeginning);

    Memo1.Lines.Append('Writing to DB');
    fdquery.SQL.Text := 'INSERT INTO justkeys (jk_data) values (:blobdata)';
    fdquery.Params[0].DataType := ftBlob;
    fdquery.Params[0].AsStream := tmspub;
    fdquery.ExecSQL;
    fdquery.Params[0].AsStream := tmsPriv;
    fdquery.ExecSQL;
    memo1.Lines.Append('DONE !!');
  end;
end;
Und dann Laden und Verschlüsseln:

Delphi-Quellcode:
procedure TForm53.Button2Click(Sender: TObject);
var
  base64String : String;
  InputStr : String;
  OutputStr : String;
  tmp : TStream;
  PubKeys : TMemoryStream;
  Privkeys : TMemoryStream;

begin
  PubKeys := TMemoryStream.Create;
  PrivKeys := TMemoryStream.Create;
  Memo1.Lines.Append('Loading Keys from DB');
  fdquery.SQL.Text := 'SELECT jk_data FROM justkeys where jk_uid = 7';
  fdquery.Open;
  fdquery.first;
  tmp := fdquery.CreateBlobStream(fdquery.FieldByName('jk_data'),TBlobStreamMode.bmRead);
  PubKeys.LoadFromStream(tmp);
  tmp.Free;
  fdquery.Close;

  fdquery.SQL.Text := 'SELECT jk_data FROM justkeys where jk_uid = 8';
  fdquery.open;
  fdquery.First;
  tmp := fdquery.CreateBlobStream(fdquery.FieldByName('jk_data'),TBlobStreamMode.bmRead);
  PrivKeys.LoadFromStream(tmp);
  tmp.Free;
  fdquery.Close;
  Memo1.Lines.Append('Keys Loaded !');
  Pubkeys.Seek(0,soBeginning);
  Privkeys.Seek(0,soBeginning);
  Signatory1.LoadKeysFromStream(pubkeys,[partPublic]);
  Signatory1.LoadKeysFromStream(privkeys,[partPrivate]);
  InputStr := 'Das ist ein sehr schöner Text zum testen der verschlüsselung';
  codecRSA.EncryptString(InputStr,base64String,TEncoding.Unicode);
  memo1.Lines.Append('Encryption: ');
  memo1.Lines.Append('Plaintext: '+InputStr);
  memo1.Lines.Append('Encrypted (Base64)');
  memo1.Lines.Append(base64String);
  memo1.Lines.Append('');
  codecRSA.DecryptString(OutputStr,base64String,TEncoding.Unicode);
  memo1.Lines.Append('Decrypted:');
  memo1.Lines.Append(outputStr);
  Pubkeys.Free;
  privkeys.Free;
end;
Gruß Ghostwalker
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#8

AW: Delphi PGP auf Android und Windows

  Alt 29. Apr 2020, 22:44
@EdAdvokat

Danke schonmal. Werd mir das dann gleich mal reinziehen.

@Turbo

Sicherlich, das Prinzip ist ja im Endeffekt das gleiche, egal ob ich nun ein Smartphone oder ein anderes Gerät nutze. Die beiden Stellen müssen lediglich ihre Public Keys austauschen und schon kannst du die Übertragungen verschlüsseln.
Danke für die Antwort. Ich hatte vergessen zu erwähnen, dass der Server eine Android App sein soll.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz