> Ale ... czy przypadkiem nie chcesz swojej kryptografii oprzec na dwoch
> niewielkich liczbach a i b ?
To znaczy? Ma to być wiele par (a,b), które złożymy ze sobą. Każda z par a,b powinna być nie za duża.
> Ale to nam od razu ogranicza do (M-1)! dla jednego stalego elementu
> czy (M/2)! dla co drugiego. czyli wielokrotnie mniej
>
> A ja sie pytam o M!-1 - czyli w praktyce - czy jest taka permutacja,
> ktorej nie da zlozyc z dwoch dowolnych innych.
Fakt.
Ja bardziej skupiam się na zasadach mnożenia tych struktur, wychodząc od (a,b).
Ogólnie każdą taką strukturę uzyskaną z jakiegoś ciągu rekurencyjnego możemy opisać za pomocą czterech parametrów a, b, 2 lub -2 oraz wymiary struktury dane powiedzmy liczbą n. n niech oznacza liczbę iteracji, jednocześnie liczba elementów permutacji będzie wynosić 2^n. Odpuśćmy chwilowo parametr 2 lub -2 i rozważajmy tylko ciągi z dzieleniem przez 2. Wówczas na przykład taką strukturę:
https://zapodaj.net/images/e8e26607fa0b8.jpg
Możemy zapisać jako S=(3,1)_3. Jest jednak jeszcze jedna właściwość tych ciągów i struktur i parametr, który może być ważny. Mianowicie jak dotychczas rozważaliśmy ciągi generowane dla kolejnych liczb naturalnych. Możemy też jednak rozważać ciągi dla liczb 0,0+c,0+2c,0+3c,... Gdzie c to jakaś liczba nieparzysta. I okazuje się, że ciągi generowane dla tych liczb też dają takie struktury. Np. niech n=4, c=3, a=3, b=1, czyli S=(3,1,3)_4:
https://zapodaj.net/images/afcd8e64f7cb6.jpg
Możemy zatem dodać jeszcze jeden parametr c i rozważać struktury S=(a,b,c)_n. To co udało mi się dotychczas ustalić, to prawdopodobne zasady mnożenia parametrów a. Mianowicie jeśli mnożymy dwie takie struktury:
S1=(a1,b1,c1)_n
S2=(a2,b2,c1)_n
to uzyskamy jakąś strukturę S3=(a3,b3,c3)_n i możemy obliczyć parametr a, o ile wynik mnożenia jest zdefiniowany. Struktury te dublują się dla parametrów a,b,c powiększonych o 2^n. Na przykład (1,1,1)_3 jest tym samym co (9,1,1)_3. To są te same struktury. Podobnie identyczne są (-7,1,1)_4 i (9,1,1)_4. Jeśli np. n=3, to sens ma zatem rozważanie struktur z parametrami a różniącymi się od siebie o maks. 8. Na przykład a=1,3,5,7 albo a=-3,-1,1,3. Jeśli weźmiemy a=-3 oraz a=5, to będą to te same struktury dla n=3. Wiedząc to możemy wyliczyć a1*a2=a3. Wystarczy pomnożyć a1*a2, zaś następnie sprawdzić, czy wynik mieści się w przedziale -2^(n-1)-1 do 2^(n-1)-1,, jeśli tak, to a3 będzie wynikiem tego mnożenia. Jeżeli wynik nie mieści się w tym przedziale, to należy obliczyć a1*a2 - 2^n*x, dla takiego x, że wynik będzie się mieścił w tym przedziale. Przykład:
(5,3)_4*(3,1)_4=(-1,-3)_4
Widzimy, że 5*3=15. Zaś a może wynosić od -7 do 7. Musimy zatem odjąć 15-16=-1. Stąd a3=-1. Inny przykład:
(7,1)_4*(3,1)_4= ?
Ten iloczyn z kolei nie jest zdefiniowany. Nie istnieje rozwiązanie, ale wiemy, że a3 powinno wynieść 7*3-16=5, gdyby rozwiązanie istniało.
Ta zasada wydaje się być uniwersalna. I to jedyna zasada mnożenia tych struktur, którą udało mi się jak na razie ustalić. Problematyczne jest to, że mnożenie nie jest przemienne. Na przykład:
(3,1)_4*(5,-3)_4=(-1,3)_4
(5,-3)_4*(3,1)_4= ?
Pierwszy iloczyn ma rozwiązanie, drugi nie ma. Jedne niewielu nieprzemiennych działań w matematyce to sumy nieskończone oraz odejmowanie (sumy nieskończone tu raczej nie będą występować). Wydaje mi się zatem, żeby aby obliczać drugi parametr b, jako wynik mnożenia tych struktur należy coś odejmować od siebie. Co więcej w tym drugim iloczynie to odejmowanie musi jakoś wyprowadzać nas poza zbiór możliwych b dla n=4 (i nie może istnieć zasada, która do tego zbioru z powrotem prowadzi jak w przypadku parametru a). Zaś w tym pierwszym tak się nie dzieje i dostajemy b=3.
Tutaj mam przykładowe wyniki składania:
(3,1)_4*(5,3)_4=(-1,-3)_4
(3,1)_4*(5,-3)_4=(-1,3)_4
(-3,1)_4*(5,3)_4=(1,-5)_4
(-3,1)_4*(5,-3)_4=(-1,-5)_4
(5,3)_4*(3,1)_4=(-1,-3)_4
(5,-3)_4*(3,1)_4= niezdefiniowane
(5,3)_4*(-3,1)_4=(1,-3)_4
(5,-3)_4*(-3,1)_4=(1,-5)_4
c zawsze przyjąłem jako równe 1. Nie wiem, czy nie trzeba pokombinować z jakimiś innymi c, żeby to zrozumieć.