FB18 - Das Forum für Informatik

fb18.de / Bachelorstudieng / PM Technische Informatik

Inverses...

Inverses... 2008-07-16 10:38
Anonymer User
Hallo,

eine Aufgabe der alten Klausur war, das Inverse 7 mod 15 einkreisen…gegeben Zahlen 0-14

Ich bekomme raus: 7*28 = 196 = 13*15 + 1

Müßte das Ergebnis jetzt nicht 28 sein? Kann aber ja garnicht, weil nur Zahlen von 0-14..
Oder ist die 13 das Ergebnis?

RE: Inverses... 2008-07-16 10:45
georg
Wenn [latex]mk\equiv 1\mod n[/latex] und [latex]m'\equiv m\mod n[/latex],
dann ist auch [latex]m'k\equiv 1\mod n[/latex].

Hilft das weiter?

RE: Inverses... 2008-07-16 12:36
Anonymer User
Kann hier nicht jemand mal ein kleinen trick posten wie man auf das inverse kommt?[18]

RE: Inverses... 2008-07-16 12:47
Fred
Naja, es muss ja gelten ((x * i) mod y) = 1 für ein i aus dem Bereich [1,y)
Man kann ja einfach alle Möglichkeiten durchprobieren, also Brute Force:
#include <iostream> unsigned inverse(unsigned x, unsigned y) {     for (unsigned i = 1; i < y; ++i)         if (((i * x) % y) == 1) return i;     return 0; } int main() {     std::cout << "Divident: ";     unsigned x;     std::cin >> x;     std::cout << " Divisor: ";     unsigned y;     std::cin >> y;          unsigned i = inverse(x, y);     if (i) std::cout << "Inverses: " << i << std::endl;     else std::cout << "Es existiert kein Inverses." << std::endl; } Divident: 7
Divisor: 15
Inverses: 13

Man kann die Multiplikation und Division auch geschickt durch Addition und Subtraktion ersetzen, sowas fällt einem Menschen ja durchaus leichter. Ein bischen logging-Ausgabe trägt hoffentlich zum Verständnis bei:
#include <iostream> unsigned inverse(unsigned x, unsigned y) {     for (unsigned i = 1, s = x; i < y; ++i)     {         std::cout << "i = " << i << "\ts = " << s << std::endl;         if (s == 1) return i;         s += x;         if (s >= y) s -= y;     }     return 0; } int main() {     std::cout << "Divident: ";     unsigned x;     std::cin >> x;     std::cout << " Divisor: ";     unsigned y;     std::cin >> y;     unsigned i = (x < y) ? inverse(x, y) : 0;     if (i) std::cout << "Inverses: " << i << std::endl;     else std::cout << "Es existiert kein Inverses." << std::endl; } Divident: 7
Divisor: 15
i = 1   s = 7
i = 2   s = 14
i = 3   s = 6
i = 4   s = 13
i = 5   s = 5
i = 6   s = 12
i = 7   s = 4
i = 8   s = 11
i = 9   s = 3
i = 10  s = 10
i = 11  s = 2
i = 12  s = 9
i = 13  s = 1
Inverses: 13

Ein paar persönliche Beobachtungen:
- Falls x ein Teiler von y ist, kann es kein multiplikatives Inverses geben.
- Sobald für s ein Wert rauskommt, der schonmal da war, kann man die Berechnung abbrechen. Es existiert dann kein multiplikatives Inverses.
- Das Multiplikative Inverse von a mod a+1 ist a:
a * a mod (a+1) = 1           Behauptung a * a  /  (a+1) = n  Rest 1   andere Schreibweise a * a  =  (a+1) * n     + 1   andere Schreibweise a * a  =  (a+1) * (a-1) + 1   mit n = a-1 a * a  =      a²-1      + 1   dritte binomische Formel a * a  =      a²              -1 + 1 = 0

RE: Inverses... 2008-07-16 13:43
Southwood
Ich denke auch, dass Brute-Force ausreichen sollte.

Eine andere Frage:

In Brunnis Folien im PKI-Kapitel steht auf Folie 19:

Note:
- RSA ≠ factoring,
- DSA ≠ Discrete Logarithm Problem (DLP),
- DH ≠ DLP

Was ist damit gemeint?

//Edit: Die Antwort ist (glaube ich), dass DH nicht auf dem DLP basiert, sondern, dass der Aufwand zur Lösung von DH ähnlich komplex ist, wie DLP. (von der RSA-Webseite: Maurer [Mau94] has shown that breaking the Diffie-Hellman protocol is equivalent to computing discrete logarithms under certain assumptions.)

RE: Inverses... 2008-07-16 20:03
Southwood
Und noch eine Klausur-Frage:

Wahr/Falsch: g ist Primwurzel von p genau dann, wenn g teilerfremd zu p ist.

Bin kein Mathematiker, aber…
- p muss eine Primzahl sein, damit g eine Primwurzel sein kann.
- dann gibt es phi(p)= p-1 Zahlen, die teilerfremd zu p sind.
- d.h., dass die Behauptung nur stimmt, wenn g<=p-1 ist.

Ich weiss nicht, ob das nicht sogar laut Definition so ist. Zumindest wird bei Diffie-Hellman gefordert, dass g<p ist.

Hab ich mir das richtig überlegt?

RE: Inverses... 2008-07-16 20:48
UncleOwen
Wahr/Falsch: g ist Primwurzel von p genau dann, wenn g teilerfremd zu p ist.

Falsch. 2 und 7 sind teilerfremd, aber [latex]2^3 \equiv 1 \text{ mod $7$}[/latex]

RE: Inverses... 2008-07-16 20:48
TieKei
Mein Lösungsansatz:
- p muss eine Primzahl sein, damit g eine Primwurzel sein kann.
ja…
Das heißt das P hat nur 1 und sich selbst als möglichen Teiler. G ist also teilerfremd, weil es ja die Wurzel von P ist (also ungleich P) und deshalb auch nicht 1 ist. Sofern man davon ausgeht dass P größer 1 ist.
Wichtig ist laut den Ausführungen von Diffie Hellmann nur, dass G teilerfremd zu P-1 ist. Was ja mit hinreichend großen Primzahlen für P auch gegeben ist.
Also falsch…

oh da war jemand schneller ;)