ujian uas 2015 kriptography_m0513019_fembi rekrisna grandea putra
TRANSCRIPT
FAKULTAS MATEMATIKA ILMU PENGETAHUAN ALAM UNS
UJIAN AKHIR SEMESTER AUGUSTUS 2015 – JANUARY 2016
Mata Kuliah : Kriptografi & Informasi Hari/tanggal : 30 Desenber 2015
Jurusan : Informatika Waktu : - Semester : V Dosen : Drs. B Harjito, M.App.Sc PhD
Sifat : Open Book dan kerjakan sesuai dengan kelompok masing-masing
1. Perhatikan Rabin Cryptosystem dengan nBxxxek mod)()( dengan nZB
adalah kunci publik. Misalkan p=199, q=211, n=pq dan B=1357. Hitunglah
a. Enkripsikan untuk nBxxeY k mod)()32767(
b. Apabila diberikan chipertext Y, tentukan empat kemungkinan deskripsinya?
2.
3.
4.
UJIAN AKHIR SEMESTER
MATA KULIAH : KRIPTOGRAFI DAN KEAMANAN INFORMASI
NAMA : FEMBI REKRISNA GRANDEA PUTRA
NIM : M0513019
1. 𝑝 = 199, 𝑞 = 211, 𝑛 = 𝑝𝑞 = 41989, dan 𝐵 = 1357.
a. 𝐸𝑘(𝑥) = 𝑥(𝑥 + 𝐵) (𝑚𝑜𝑑 𝑛). Oleh karena itu
𝐸𝑘(32767) ≡ (32767)(32767 + 1357) (𝑚𝑜𝑑 41989),
≡ 16027 (𝑚𝑜𝑑 41989).
b. Diketahui bahwa
𝐸𝑘 (𝜔 (𝑥 +𝐵
2) −
𝐵
2) = 𝐸𝑘(𝑥),
dengan ω adalah akar kuadrat dari 1 mod (41989) dan 2−1 ≡ 20995 (𝑚𝑜𝑑 41989).
Oleh karena itu
𝜔 (32767 +1357
2) ≡ 𝜔(12451) − 21673 ≡ 𝜔(12451) + 20316 (𝑚𝑜𝑑 41989).
Empat kemungkinan dekripsi dari 16027 adalah
𝜔 = 1 : 1(12451) + 20316 ≡ 32767 (𝑚𝑜𝑑 41989),
𝜔 = −1 : −1(12451) + 20316 ≡ 7865 (𝑚𝑜𝑑 41989),
𝜔 = 35025 : 35025(12451) + 20316 ≡ 18837 (𝑚𝑜𝑑 41989),
𝜔 = 6964 : 6964(12451) + 20316 ≡ 21795 (𝑚𝑜𝑑 41989).
2. Berikut ini perhitungan untuk menyelesaikan kasus pada a, b, dan c dengan
menggunakan tabel.
X x3 x 28 hasil x3+x+28 mod 71 y (x,y) Status
0 0 0 28 28 28 5.291503 Not cyclic group
1 1 1 28 30 30 5.477226 Not cyclic group
2 8 2 28 38 38 6.164414 Not cyclic group
3 27 3 28 58 58 7.615773 Not cyclic group
4 64 4 28 96 25 5 (4,5) (4,67) CYCLIC GROUP
5 125 5 28 158 16 4 (5,4) (5,66) CYCLIC GROUP
6 216 6 28 250 37 6.082763 Not cyclic group
7 343 7 28 378 23 4.795832 Not cyclic group
8 512 8 28 548 51 7.141428 Not cyclic group
9 729 9 28 766 56 7.483315 Not cyclic group
10 1000 10 28 1038 44 6.63325 Not cyclic group
11 1331 11 28 1370 21 4.582576 Not cyclic group
12 1728 12 28 1768 64 8 (12,8) (12,59) CYCLIC GROUP
13 2197 13 28 2238 37 6.082763 Not cyclic group
14 2744 14 28 2786 17 4.123106 Not cyclic group
15 3375 15 28 3418 10 3.162278 Not cyclic group
16 4096 16 28 4140 22 4.690416 Not cyclic group
17 4913 17 28 4958 59 7.681146 Not cyclic group
18 5832 18 28 5878 56 7.483315 Not cyclic group
19 6859 19 28 6906 19 4.358899 Not cyclic group
20 8000 20 28 8048 25 5 (20,5) (20,51) CYCLIC GROUP
21 9261 21 28 9310 9 3 (21,3) (21,50) CYCLIC GROUP
22 10648 22 28 10698 48 6.928203 Not cyclic group
23 12167 23 28 12218 6 2.44949 Not cyclic group
24 13824 24 28 13876 31 5.567764 Not cyclic group
25 15625 25 28 15678 58 7.615773 Not cyclic group
26 17576 26 28 17630 22 4.690416 Not cyclic group
27 19683 27 28 19738 0 0 (27,0) (27,71) CYCLIC GROUP
28 21952 28 28 22008 69 8.306624 Not cyclic group
29 24389 29 28 24446 22 4.690416 Not cyclic group
30 27000 30 28 27058 7 2.645751 Not cyclic group
31 29791 31 28 29850 30 5.477226 Not cyclic group
32 32768 32 28 32828 26 5.09902 Not cyclic group
33 35937 33 28 35998 1 1 (33,1) (33,70) CYCLIC GROUP
34 39304 34 28 39366 32 5.656854 Not cyclic group
35 42875 35 28 42938 54 7.348469 Not cyclic group
36 46656 36 28 46720 2 1.414214 Not cyclic group
37 50653 37 28 50718 24 4.898979 Not cyclic group
38 54872 38 28 54938 55 7.416198 Not cyclic group
39 59319 39 28 59386 30 5.477226 Not cyclic group
40 64000 40 28 64068 26 5.09902 Not cyclic group
41 68921 41 28 68990 49 7 (41,7) (41,30) CYCLIC GROUP
42 74088 42 28 74158 34 5.830952 Not cyclic group
43 79507 43 28 79578 58 7.615773 Not cyclic group
44 85184 44 28 85256 56 7.483315 Not cyclic group
45 91125 45 28 91198 34 5.830952 Not cyclic group
46 97336 46 28 97410 69 8.306624 Not cyclic group
47 103823 47 28 103898 25 5 (47,5) (47,24) CYCLIC GROUP
48 110592 48 28 110668 50 7.071068 Not cyclic group
49 117649 49 28 117726 8 2.828427 Not cyclic group
50 125000 50 28 125078 47 6.855655 Not cyclic group
51 132651 51 28 132730 31 5.567764 Not cyclic group
52 140608 52 28 140688 37 6.082763 Not cyclic group
53 148877 53 28 148958 0 0 (53,0 ) (53,71) CYCLIC GROUP
54 157464 54 28 157546 68 8.246211 Not cyclic group
55 166375 55 28 166458 34 5.830952 Not cyclic group
56 175616 56 28 175700 46 6.78233 Not cyclic group
57 185193 57 28 185278 39 6.244998 Not cyclic group
58 195112 58 28 195198 19 4.358899 Not cyclic group
59 205379 59 28 205466 63 7.937254 Not cyclic group
60 216000 60 28 216088 35 5.91608 Not cyclic group
61 226981 61 28 227070 12 3.464102 Not cyclic group
62 238328 62 28 238418 0 0 (62,0) (62,71) CYCLIC GROUP
63 250047 63 28 250138 5 2.236068 Not cyclic group
64 262144 64 28 262236 33 5.744563 Not cyclic group
65 274625 65 28 274718 19 4.358899 Not cyclic group
66 287496 66 28 287590 40 6.324555 Not cyclic group
67 300763 67 28 300858 31 5.567764 Not cyclic group
68 314432 68 28 314528 69 8.306624 Not cyclic group
69 328509 69 28 328606 18 4.242641 Not cyclic group
70 343000 70 28 343098 26 5.09902 Not cyclic group
Sehingga didapatkan nilai total jumlah titik E, titik x,y untuk setiap titik E, dan titik
maksimumnya sebagai berikut:
Point E= 23
titiknya :
(4,5) (4,67)
(5,4) (5,66)
(12,8) (12,59)
(20,5) (20,51)
(21,3) (21,50)
(27,0) (27,71)
(33,1) (33,70)
(41,7) (41,30)
(47,5) (47,24)
(53,0 ) (53,71)
(62,0) (62,71)
MAX ELEMENT Pada titik
8.306623863 (28,(8.3) )
3. 𝑝 = 31847
𝛼 = 5
𝛽 = 25703
a. 𝑦1 = 𝛼𝑘(𝑚𝑜𝑑 𝑝)
23972 = 5𝑘(𝑚𝑜𝑑 31847)
𝟓𝒌(𝒎𝒐𝒅 𝟑𝟏𝟖𝟒𝟕) = 𝟐𝟑𝟗𝟕𝟐
𝑥 = 𝑦2(𝑦1𝑎)−1 𝑚𝑜𝑑 𝑝
8990 = 31396(23972𝑎)−1 𝑚𝑜𝑑 31847
(𝟐𝟑𝟗𝟕𝟐𝒂)−𝟏 𝒎𝒐𝒅 𝟑𝟏𝟖𝟒𝟕 =𝟖𝟗𝟗𝟎
𝟑𝟏𝟑𝟗𝟔
b. 𝑦1 = 𝛼𝑘(𝑚𝑜𝑑 𝑝)
23972 = 5𝑘(𝑚𝑜𝑑 31847)
𝟓𝒌(𝒎𝒐𝒅 𝟑𝟏𝟖𝟒𝟕) = 𝟐𝟑𝟗𝟕𝟐
𝑥 = 𝑦2(𝑦1𝑎)−1 𝑚𝑜𝑑 𝑝
31415 = 20481(23972𝑎)−1 𝑚𝑜𝑑 31847
(𝟐𝟑𝟗𝟕𝟐𝒂)−𝟏 𝒎𝒐𝒅 𝟑𝟏𝟖𝟒𝟕 =𝟑𝟏𝟒𝟏𝟓
𝟐𝟎𝟒𝟖𝟏
4. #include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "lip.h"
struct data {long j, alpha_j;};
int fcmp(const void *d1, const void *d2)
{
struct data *data1 = (struct data *) d1;
struct data *data2 = (struct data *) d2;
if (data1->alpha_j < data2->alpha_j) return - 1;
if (data1->alpha_j > data2->alpha_j) return + 1;
return 0;
}
long Shanks(long alpha, long beta, long p)
/* returns log(alpha, beta) in Z_p where
alpha is a generator and beta is in Z_p */
{
int found = 0;
long i, log, m = ceil(sqrt(p - 1));
struct data *table1 = calloc(m, sizeof(struct data));
struct data *table2 = calloc(m, sizeof(struct data));
struct data *d, key;
verylong za = 0, zb = 0, zc = 0, zp = 0;
verylong zalpha = 0, zalpha_i = 0;
verylong zbeta = 0, zp1 = 0;
if (!table1 || !table2) {
fprintf(stderr, "*error*\nin sufficient memory\n");
fprintf(stderr, "from Shanks\n");
exit(1);
}
/* create a logarithm table */
zintoz(alpha, &zalpha);
zintoz(beta, &zbeta);
zintoz(p, &zp);
zintoz(p - 1, &zp1);
zsexpmod(zalpha, m, zp, &zalpha_i);
for (i = 0; i < m; i++) {
table1[i].j = i;
zsexpmod(zalpha_i, i, zp, &za);
table1[i].alpha_j = ztoint(za);
}
zinvmod(zalpha, zp, &zalpha_i);
for (i = 0; i < m; i++) {
table2[i].j = i;
zsexpmod(zalpha_i, i, zp, &za);
zmulmod(zbeta, za, zp, &zb);
table2[i].alpha_j = ztoint(zb);
}
/* sort the tables by second data item */
qsort(table1, m, sizeof(struct data), fcmp);
qsort(table2, m, sizeof(struct data), fcmp);
for (i = 0; !found && i < m; i++) {
key.j = table1[i].j;
key.alpha_j = table1[i].alpha_j;
d = bsearch(&key, table2, m, sizeof(struct data), fcmp);
if (d) {
zintoz(key.j, &za);
zintoz(m, &zb);
zmulmod(za, zb, zp1, &zc);
zintoz(d->j, &za);
zaddmod(za, zc, zp1, &zb);
log = ztoint(zb);
zsexpmod(zalpha, log, zp, &za);
found = zcompare(za, zbeta) == 0;
}
}
if (!found) log = 0;
zfree(&za);
zfree(&zb);
zfree(&zc);
zfree(&zp);
zfree(&zalpha);
zfree(&zalpha_i);
zfree(&zbeta);
zfree(&zp1);
return log;
}
int main(void)
{
long alpha = 5, beta = 26379, gamma = 20679;
long a, k, delta = 11082, p = 31847, x = 20543;
verylong za = 0, zb = 0, zc = 0, zk = 0, zp = 0;
verylong zx = 0;
verylong zalpha = 0, zbeta = 0, zgamma = 0;
verylong zdelta = 0, zp1 = 0;
zintoz(alpha, &zalpha);
zintoz(beta, &zbeta);
zintoz(gamma, &zgamma);
zintoz(delta, &zdelta);
zintoz(p, &zp);
zintoz(x, &zx);
zintoz(p - 1, &zp1);
zexpmod(zbeta, zgamma, zp, &za);
zexpmod(zgamma, zdelta, zp, &zb);
zexpmod(zalpha, zx, zp, &zc);
zmulmod(za, zb, zp, &zk);
if (zcompare(zk, zc) == 0)
printf("signature accepted\n");
else
printf("signature rejected\n");
a = Shanks(alpha, beta, p);
k = Shanks(alpha, gamma, p);
printf("a = %ld\n", a);
printf("k = %ld\n", k);
zfree(&za);
zfree(&zb);
zfree(&zc);
zfree(&zk);
zfree(&zx);
zfree(&zalpha);
zfree(&zbeta);
zfree(&zgamma);
zfree(&zdelta);
return 0;
}