• Tidak ada hasil yang ditemukan

Implementasi Kombinasi Algoritma Beaufort Dan Algoritma Spritz Dalam Skema Super Enkripsi Untuk Pengamanan Teks

N/A
N/A
Protected

Academic year: 2017

Membagikan "Implementasi Kombinasi Algoritma Beaufort Dan Algoritma Spritz Dalam Skema Super Enkripsi Untuk Pengamanan Teks"

Copied!
13
0
0

Teks penuh

(1)

BAB 2

LANDASAN TEORI

2.1 Kriptografi

2.1.1 Definisi Kriptografi

Kriptografi berasal dari bahasa Yunani yang terdiri dari dua kata yaitu crypto dan

graphia. Crypto berarti rahasia dan graphia berarti tulisan. Jadi secara etimologi

kriptografi adalah tulisan rahasia. Secara terminologi,kriptografi adalah ilmu dan seni

untuk menjaga kemananan pesan ketika pesan dikirim dari suatu tempat ke tempat

yang lain. Kriptografi adalah ilmu untuk mempelajari teknik-teknik matematika yang

berhubungan dengan aspek-aspek pada keamanan informasi misalnya kerahasiaan

(confidentiality), integritas (integrity), otentikasi (authentication) (Munir, 2006).

Dalam Perkembangannya, kriptografi juga dimanfaatkan untuk mengidentifikasi

pengiriman pesan dan tanda tangan digital serta keaslian pesan dengan menggunakan

sidik jari digital (Ariyus,2008).

Teknik kriptografi yang digunakan dalam penyandian pesan dilakukan dengan

menyembunyikan atau mengodekan pesan yang asli. Selanjutnya, pengirim pesan

akan melakukan penyandian pesan awal menjadi kode-kode yang hanya dapat dibaca

oleh penerima pesan tersebut. Proses ini disebut dengan Enkripsi . Penerima pesan

kemudian mengembalikan kode-kode yang telah diterima menjadi pesan asli dengan

menggunakan kunci yang dikirimkan oleh pengirim pesan. Proses ini disebut dengan

Dekripsi (Schneier, 1996). Pada gambar 2.1 memnunjukkan proses enkripsi dan

dekripsi.

(2)

Pesan awal dalam sistem kriptografi disebut juga sebagai plaintext

(disimbolkan dengan p), yaitupesan yang hendak dikirimkan yang berisi data asli.

Sedangkan pesan setelah dienkripsi disebut dengan ciphertext (disimbolkan dengan

c),pesan yang ada pada chipertext tidak bisa dibaca karena berisi karakter-karakter

yang tidak memiliki makna (arti). Kunci yang dikirimkan pengirim kepada penerima

pesan yang kemudian untuk melakukan proses dekripsi disebut dengan key

(disimbolkan dengan k). Enkripsi yaitu

Suatu algoritma dikatakan aman, bila tidak ada cara ditemukan plaintext nya.

Karena selalu terdapat kemungkinan ditemukannya cara baru untuk menembus

algoritma kriptografi, maka algoritma kriptografi yang dikatakan aman apabila

memiliki keadaan sebagai berikut (Yusuf, 2004):

proses pengubahan plaintextmenjadi

ciphertext disimbolkan dengan E(p) sedangkan dekripsi yaitu mengubahciphertext

menjadi plaintext, sehingga menghasilkan data awal/asli. disimbolkan dengan D(c)

(Schneier, 1996).

a. Bila harga untuk menjebol algoritma lebih besar daripada nilai informasi yang

dibuka, maka algoritma itu cukup aman.

b. Bila waktu yang digunakan untuk membobol algoritma tersebut lebih lama daripada

lamanya waktu yang diperlukan oleh informasi tersebut harus tetap aman, maka

algoritma tersebut mungkin aman.

c. Bila jumlah data yang dienkrip dengan kunci dan algoritma yang sama lebih sedikit

dari jumlah data yang diperlukan untuk menembus algoritma tersebut, maka

algoritma itu aman.

2.1.2 Tujuan Kriptografi

Tujuan dari kriptografi yang juga merupakan aspek keamanan informasi adalah

sebagai berikut (Menezes,et al., 1996):

1. Kerahasiaan (confidentiality) adalah layanan yang digunakan untuk menjaga isi

informasi dari semua pihak kecuali pihak yang berwenang untukmendapatkan

informasi.Confidentiality senada dengan istilah secrecy dan privacy. Ada

beberapa cara untuk menjaga kerahasiaan, dari pengamanan secara fisik hingga

penggunaan algoritma matematika yang membuat data tidak dapat dimengerti.

2. Integritasdata (data integrity) adalah layanan penjagaan pengubahan data dari

(3)

data, sistem harus mempunyai kemampuan untuk mendeteksi terjadinya

manipulasi data oleh pihak-pihak yang tidak berkepentingan. Manipulasi data

yang dimaksud di sini meliputi penyisipan, penghapusan, maupun penggantian

data.

3. Otentikasi(Authentication) adalah layanan yang berhubungan dengan identifikasi,

baik mengidentifikasi kebenaran pihak-pihak yang berkomunikasi (user

authentication atau entity authentication) maupun mengidentifikasi kebenaran

sumber pesan (data origin authentication). Beberapa pihak yang berkomunikasi

harus mengidentifikasi satu sama lainnya. Informasi yang didapat oleh suatu

pihak dari pihak lain harus diidentifikasi untuk memastikan keaslian dari

informasi yang diterima. Identifikasi terhadap suatu informasi dapat berupa

tanggal pembuatan informasi, isi informasi, waktu kirim dan hal-hal lainnya yang

berhubungan dengan informasi tersebut.

4. Nirpenyangkalan (non-repudiation) adalah layanan untuk mencegah pihak-pihak

yang berkomunikasi melakukan penyangkalan, yaitu pengirim pesan menyangkal

melakukan pengiriman atau penerima pesan menyangkal telah menerima pesan.

2.1.3 Sistem Kriptografi Klasik

Sistem kriptografi klasik digunakan beberapa abad yang lalu sebelum adanya

komputer. Penyandian pesan dilakukan karakter per karakter. Terdapat dua metode

yang dilakukan untuk menyandikan pesan pada sistem kriptografi klasik, yaitu Teknik

Substitusi dan Teknik Transposisi.Tekniksubstitusi dilakukan dengan cara

penggantian setiap karakter teks asli dengan karakter lain. Sedangkan Teknik

transposisi dilakukan pengacakan urutan karakter tanpa mengganti karakter pada

pesan tersebut (Ariyus, 2012).

2.1.4 Sistem Kriptografi Modern

Pengembangan sistem kriptografi modern didorong oleh perkembangan komputer

yang merepresentasikan data dalam bentuk bilangan biner. Sistem kriptografi modern

tidak lagi menggunakan mode karakter untuk proses enkripsi dan dekripsi, tetapi

menggunakan mode bit. Algoritma kriptografi dengan mode bit dapat dikelompokkan

menjadi dua bagian, yaitu Cipher Aliran (Stream Cipher) dan Cipher Blok (Block

(4)

Block Cipher mengenkripsi atau mendekripsikan pesan dalam bentuk blok bit dengan

panjang bit yang telah ditentukan sebelumnya (Sadikin, 2012).

2.1.5 Jenis Algoritma Kriptografi

Algoritma kriptografi dapat diklasifikasikan menjadi dua jenis berdasarkan kuncinya,

yaitu algoritma simetris dan algoritma asimetris (Prayudi, 2005).

1. Algoritma Simetris

Algoritma ini disebut simetris karena memiliki key atau kunci yang sama dalam proses

enkripsi dan dekripsi sehingga algoritma ini juga sering disebut algoritma kunci

tunggal atau algoritma satu kunci. Key dalam algoritma ini bersifat rahasia atau

private key sehingga algoritma ini biasa disebut dengan algoritma kunci rahasia

(Prayudi, 2005). Contoh algoritma simetris yaitu Beaufort, Spritz, Blowfish, Twofish,

DES(Data Encryption Standard).

2. Algoritma Asimetris

Algoritma ini disebut asimetris karena kunci yang digunakan untuk enkripsi berbeda

dengan kunci yang digunakan untuk dekripsi. Kunci yang digunakan untuk enkripsi

adalah kunci publik atau public key sehingga algoritma ini disebut dengan algoritma

kunci publik. Sedangkan kunci untuk dekripsi menggunakan kunci rahasia atau

private key (Prayudi, 2005). Contoh algoritma asimetris yaitu RSA(Riverst Shamir

Adleman), ECC(Elliptic Curve Cryptography),Elgamal.

2.2 Algoritma Beaufort

Algoritma Beaufort ditemukan oleh Laksamana Sir Francis Beaufort, Royal Navy.

Algoritma Beaufort merupakan salah satu varian dari metode Vigenère Cipher

(Widyastuti, 2014). Proses enkripsi dan dekripsi pada algoritma Beaufort

(5)

Tabel 2.1 Tabel Beaufort

Baris paling atas pada tabel 2.1 menyatakan huruf dari plaintext. Proses

enkripsi dilakukan dengan cara menarik garis vertikal dari plaintext sampai kepada

karakter key yang telah ditentukan, selanjutnya tarik garis horizontal dari karakter key

yang telah ditentukan sampai kolom pertama. Karakter pada kolom pertama tersebut

adalah ciphertext yang diperoleh. Proses dekripsi dilakukan berlawanan dengan

enkripsi. Proses ini dimulai dengan memilih ciphertext dari kolom pertama kemudian

tarik garis lurus sampai menemukan karakter key yang telah ditentukan, selanjutnya

ditarik garis vertikal ke atas dari karakter key tersebut sampai ke baris pertama.

Karakter pada baris pertama merupakan plaintext (Tassel, 1969).

Berikut adalah contoh proses enkripsi dengan menggunakan tabel 1:

Plaintext : T I A R A H M A D I A N T I

Kunci : I M I L K O M H I M A T I F

(6)

Namun, pada saat ini algoritma beaufort tidak hanya bisa mengenkripsi dan

dekripsi huruf saja tetapi angka maupun simbol-simbol yang terdapat pada tabel

ASCII bisa di enkripsi dan dekripsi. Dalam perkembangan sistem komputasi modern,

karakter atau simbol biasanya direpresentasikan dalam bentuk ASCII. Setiap karakter

atau simbol yang muncul di layar komputer memiliki kode ASCII yang berbeda dan

panjang masing-masing kode ASCII dalam biner adalah 8 bit (Budiman and

Rachmawati, 2017).

Tabel 2.2 Tabel List Karakter

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49

a b c d e f g h i J k l m n o P q r s t u v w x

50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74

y z 0 1 2 3 4 5 6 7 8 9 sp ! " # $ % & ' ( ) * + ,

75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

- . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~ ¢ € £ ¥ ©

Pada tabel 2.2 menunjukkan list karakter yang akan digunakan. Adapun list karakter

yang digunakan sebanyak 100 karakter. Proses enkripsi dan dekripsi algoritma

Beaufort Cipher dirumuskan sebagai berikut:

Ci ≡ Ki−Pi

P

(mod n) --- (1)

i ≡ Ki−Ci

dimana � merupakan plaintext, � adalah key, � adalah ciphertext yang diperoleh dan � adalah jumlah karakter yang digunakan (Mollin, 2007).

(mod n) ---(2)

Berikut adalah contoh proses enkripsi dan dekripsi :

Plaintext : TIA RAHMADIANTI

(7)

Tabel 2.3 Tabel Enkripsi Beaufort

Pada tabel 2.3 dihasilkan ciphertext melalui fungsi enkripsi Beaufort. Fungsi enkipsi

Beaufort untuk menghasilkan ciphertext diperoleh dengan operasi pengurangan indeks

(8)

Pada tabel 2.4 dihasilkan plaintextseperti semula yaitu “ TIA RAHMADIANTI”

melalui fungsi dekripsiBeaufort. Fungsi dekripsiBeaufort untuk menghasilkan

plaintextdiperoleh dengan operasi pengurangan indeks kunci terhadap indeks

ciphertext.

2.3 Algoritma Spritz

Pada tahun 2014, perancang algoritma RC4, Ron Rivest, dan Jacob Schultz

merancang sebuah pembaharuan dari desain algoritma RC4 yang diberi nama Spritz

(Rivest dan Schuldt, 2014). Spritz merupakan sebuah varian dari RC4 yang

mengimplementasikan sponge-based construction dalam penghasilan kunci rahasia

dan proses enkripsi. Tingginya kompleksitas dari algoritma Spritz karena

sponge-based construction meningkatkan keamanan dari algoritma RC4. Namun, karena

algoritma Spritz meningkatkan kompleksitas dari RC4, maka waktu yang digunakan

untuk mengenkripsi sebuah data juga meningkat meskipun tingkat keamanan dari

algoritma Spritz lebih tinggi dari RC4 (Rivest dan Schuldt, 2014). Spritz termasuk

algoritma stream cipher. Stream cipher merupakan algoritma yang mengenkripsi

pesan satu per satu karakter dengan menggunakan transformasi enkripsi yang

bergantung pada waktu yang singkat. Algoritma Spritz termasuk algoritma kriptografi

kunci simetrik. Algoritma ini memiliki dua bagian utama: Key Scheduling Algorithm

(KSA) dan Pseudo-Random Generation Algorithm (PRGA).

2.3.1 Key Scheduling Algorithm (KSA)

Key-Scheduling Algorithm (KSA) pada Algoritma Spritz sama dengan algoritma RC4

yaitu menghasilkan permutasi dari 256 kemungkinan bytes yang ada pada array S.

spasi 62 spasi 62 0 A

H 7 U 20 13 N

© 99 S 18 19 T

(9)

Tabel 2.5 Key Scheduling Algorithm (KSA)

for i from 0 to 255 S[i] := i

endfor

j := 0

for i from 0 to 255

j := (j + S[i] + key[i mod keylength]) mod 256 swap values of S[i] and S[j]

endfor

Dimana S adalah permutasi 256-byte yang diinisialisasikan KSA dan variabel i dan j

merupakan variabel integer yang mempunyai nilai awal 0.

2.3.2 Pseudo-Random Generation Algorithm (PRGA)

Pseudo-Random Generation Algorithm (PRGA) berbeda dengan algoritma RC4.

Pseudo-Random Generation Algorithm(PRGA) untuk mendapatkan byte acak untuk

enkripsi.

Tabel 2.6Pseudo-Random Generation Algorithm(PRGA)

For a from 0 toplaintext-1 i = i + w

j = k + S[j + S[i]]

k = i + k + S[j]

swap S[i] with S[j]

z = S[j + S[i + S[z + k]]]

output z

EndFor

dimana w adalah relatif prima dengan panjang S. Variabel i, j, k merupakan variabel

integer yang mempunyai nilai awal 0 dan z merupakan variabel integer yang

merupakan output dan mempunyai nilai awal 0.

Tabel 2.7 Larik 256 byte hasil perhitungan tahap key scheduling

0 1 2 3 4 5 6 7 8 9 10 11 12 13

114 92 12 64 47 172 32 122 154 186 236 102 218 15

14 15 16 17 18 19 20 21 22 23 24 25 26 27

(10)

28 29 30 31 32 33 34 35 36 37 38 39 40 41

178 7 243 142 105 224 44 19 23 71 40 136 59 152

42 43 44 45 46 47 48 49 50 51 52 53 54 55

149 79 66 41 126 35 87 98 81 60 107 113 97 20

56 57 58 59 60 61 62 63 64 65 66 67 68 69

106 193 109 11 90 116 125 240 29 253 101 210 43 91

70 71 72 73 74 75 76 77 78 79 80 81 82 83

117 2 223 84 50 137 77 185 121 226 175 158 228 65

84 85 86 87 88 89 90 91 92 93 94 95 96 97

16 192 234 28 171 78 135 214 213 145 34 169 0 205

98 99 100 101 102 103 104 105 106 107 108 109 110 111

159 161 56 151 227 139 217 237 209 207 76 202 24 189

112 113 114 115 116 117 118 119 120 121 122 123 124 125

85 249 180 254 246 221 115 245 168 195 22 244 219 230

126 127 128 129 130 131 132 133 134 135 136 137 138 139

72 157 206 201 104 89 197 231 200 53 176 26 9 112

140 141 142 143 144 145 146 147 148 149 150 151 152 153

54 177 232 199 196 75 25 241 33 18 1 208 58 165

154 155 156 157 158 159 160 161 162 163 164 165 166 167

138 212 86 190 83 93 167 252 63 30 68 82 17 250

168 169 170 171 172 173 174 175 176 177 178 179 180 181

204 248 100 61 148 62 118 10 155 67 247 130 80 21

182 183 184 185 186 187 188 189 190 191 192 193 194 195

153 5 203 242 238 111 37 233 110 188 134 229 13 211

196 197 198 199 200 201 202 203 204 205 206 207 208 209

120 173 147 162 144 251 57 164 235 124 38 14 48 108

210 211 212 213 214 215 216 217 218 219 220 221 222 223

46 27 222 69 94 45 70 181 216 141 156 239 187 146

224 225 226 227 228 229 230 231 232 233 234 235 236 237

215 123 194 119 255 73 184 182 170 150 49 128 225 42

238 239 240 241 242 243 244 245 246 247 248 249 250 251

(11)

Misalkan pada tahap key schedulling menghasilkan larik S seperti yang

ditunjukkan oleh tabel 2.7 dan pesan yang akan dienkripsi adalah “rc4” dengan kode

ASCII 114, 99 dan 52. Ciphertext akan dihitung dengan menginisialisasikan nilai i, j,

k, z dengan nilai 0 dan w merupakan nilai acak yang relatif prima dengan 256 dan

setiap baris di modulo dengan 256. Hasil perhitungan pertama adalah:

i = i + w = 0+149 mod 256 = 149

j = k + S[j + S[i]] = 0 + S[0 + S[149]] mod 256

= 0 + S[18] mod 256

= S[18] = 183

k = i + k + S[j] = 149 + 0 + S[183] mod 256

= 149 + 5 mod 256

= 154

S[i] , S[j] = S[i] = S[149] = 18, S[j] = S[ 183] = 5

SwapS[i] withS[j] = S[i] = S[149] = 5, S[j] = S[183] = 18

z = S[j + S[i + S[z + k]]] = S[183 + S[149 + S[0 + 154]]] mod 256

= S[183 + S[149 + 138]] mod 256

= S[183 + S[31] mod 256

= S[183 + 142] mod 256

= S[69] = 91

Kemudian lakukan operasi XOR pada karakter pertama plaintext yang dihasilkan

yaitu karakter “r” yang bernilai 114 dengan output z yang dihasilkan adalah 91.

Dengan cara sebagai berikut :

114 = 01110010

91 = 01011011

= 00101001 = 41

10 dalam tabel ASCII merupakan karakter “)”.

Proses perhitungan tersebut diulang sampai karakter terakhir plaintext. Algoritma

yang sama juga digunakan untuk proses dekripsi. 252 253 254 255

(12)

2.4 Super Enkripsi

Super Enkripsi merupakan metode pengkombinasian antara kedua algoritma yang

bertujuan untuk mendapatkan cipher yang lebih kuat sehingga sangat sulit untuk

dipecahkan, dan juga untuk mengatasi penggunaan cipher tunggal yang secara

komparatif lemah (Setyaningsih.,dkk,2011).

Super enkripsi tidak mudah untuk dipecahkan karena proses enkripsinya

dilakukan sebanyak dua kali atau lebih sehingga ciphertext yang dihasilkan juga

jumlahnya sebanyak dua buah atau lebih (Halim,2007).

2.5 Kompleksitas Algoritma

Algoritma yang efisien adalah algoritma yang meminimumkan kebutuhan waktu dan

ruang. Dengan menganalisis beberapa algoritma untuk suatu masalah,dapat

diidentifikasi satu algoritma yang paling efisien. Besaran yang digunakan untuk

menjelaskan model pengukuran waktu dan ruang ini adalah kompleksitas algoritma.

Kompleksitas dari suatu algoritma merupakan ukuran seberapa banyak komputasi

yang dibutuhkan algoritma tersebut untuk mendapatkan hasil yang diinginkan.

Algoritma yang dapat memperoleh hasil yang diinginkan dalam waktu yang singkat

memiliki kompleksitas yang rendah, sementara algoritma yang membutuhkan waktu

yang lama untuk memperoleh hasil tersebut mempunyai kompleksitas yang tinggi

(Azizah, 2013).

Untuk menghitung kompleksitas algoritma digunakan kode program

menggunakan tabel yang berisi kolom C, kolom # dan kolom �� #. Dimana kolom C

merupakan kolom yang menunjukkan berapa kali processor melakukan komputasi.

Kolom # menunjukkan variabel untuk menghitung pengerjaan satu baris program.

Kolom �� # untuk menghitung hasil perkalian kolom C dan kolom #.

(�)=��#�--- (3)

Hasil dari kolom �� # dijumlahkan berdasarkan persamaan (3), sehingga

(13)

2.6 Penelitian yang Relevan

Beberapa penelitian terdahulu yang relevan dengan penelitian yang akan dilakukan

oleh penulis antara lain adalah sebagai berikut:

1. Widyastuti (2012) mengimplementasikan kriptografi super enkripsi dengan

menggabungkan dua algoritma yaitu Playfair dan Vigenère Cipher

membuktikan bahwa algoritma super enkripsi ini efektif dan aman digunakan.

2. Nurnawati (2008) menganalisis kriptografi menggunakan algoritma

VigenèreCipher dengan mode operasi Cipher Block Chainng(CBC)

membuktikan bahwa algoritma Vigenère hanya menampung 26 huruf alfabet

dalam bentuk huruf kecil dan tanda baca yang lainnya tidak dapat terbaca.

3. Rivest dan Schuldt (2014) membuktikan bahwa algoritma Spritz meningkatkan

kompleksitas dari RC4, maka waktu yang digunakan untuk mengenkripsi

sebuah data juga meningkat dan tingkat keamanan dari algoritma Spritz lebih

baik dari RC4.

4. Syuhada(2016) membuktikan bahwa Algoritma RC4 merupakan algoritma

kriptografi simetris yang dalam penggunaannya memiliki keunggulan pada

kecepatan dan kemudahan dalam proses perhitungan.

5. Weerasinghe(2012) dalam penelitian nya yang berjudul Analysis of a Modified

RC4 Algorithm menyatakan bahwa algoritma yang dimodifikasi lebih baik

daripada RC4 yang asli dalam segi kerahasiaan dan performa.

6. Soofi.,et al(2016) melakukan penelitian yang berjudul An Enhanced Vigenère

Cipher For Data Security membuktikan bahwa kelemahan penting pada

algoritma Vigenère Cipher yaitu perulangan pada kunci nya. Jika kriptanalis

Gambar

Gambar 2.1 Diagram Proses Enkripsi dan Dekripsi
Tabel 2.3 Tabel Enkripsi Beaufort
Tabel 2.5 Key Scheduling Algorithm (KSA)

Referensi

Dokumen terkait

Untuk meningkatkan keamanan dari algoritma ADFGVX Cipher maka algoritma ini dikombinasikan dengan algoritma knapsack.. Algoritma knapsack merupakan salah satu

Dari rumusan masalah dan batasan masalah tersebut, maka tujuan daripada penulisan tugas akhir ini adalah untuk mendapatkan ciphertextyang aman, yang merupakan hasil dari

Untuk mempercepat proses dekripsi data pada algoritma Rabin ,maka dapat di gunakan metode yang di jelaskan dalam algoritma Williams dengan langkah sebagai berikut:.

Gambar 3.15 Perancangan Interface Halaman Tentang Aplikasi 38 Gambar 3.16 Perancangan Interface Halaman Tentang Algoritma 39 Gambar 3.17 Perancangan Interface Halaman Enkripsi

Teknik transposisi menggunakan permutasi karakter, yang mana dengan menggunakan teknik ini pesan yang asli tidak dapat dibaca kecuali orang yang memiliki kunci untuk

RC4 + Cipher yang digunakan pada proses enkripsi, kolom C2 adalah hasil enkripsi kedua yang diperoleh dengan menggunakan algoritma RC4 + Cipher. Rata-rata yang diperoleh

Perancangan Aplikasi Pembelajaran Kriptografi Kunci Publik ElGamal Untuk Mahasiswa. Universitas

Document aDoc = wordApp.Documents.Open(ref filenameO, ref objFalse, ref objTrue, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,