Network Security Instructor Manual
Network Security Instructor Manual
TENKASI
Lab Manual
CCS354- Network Security
(VI Semester)
CCS354 NETWORK SECURITY LTPC
2023
COURSE OBJECTIVES:
To learn the fundamentals of cryptography.
To learn the key management techniques and authentication approaches.
To explore the network and transport layer security techniques.
To understand the application layer security standards.
To learn the real time security practices.
UNIT I INTRODUCTION 8
Basics of cryptography, conventional and public-key cryptography, hash functions, authentication,
and digital signatures.
UNIT II KEY MANAGEMENT AND AUTHENTICATION 7
Key Management and Distribution: Symmetric Key Distribution, Distribution of Public Keys,
X.509 Certificates, Public-Key Infrastructure. User Authentication: Remote User-Authentication
Principles, Remote User-Authentication Using Symmetric Encryption, Kerberos Systems, Remote
User Authentication Using Asymmetric Encryption.
UNIT III ACCESS CONTROL AND SECURITY 4
Network Access Control: Network Access Control, Extensible Authentication Protocol, IEEE
802.1X Port-Based Network Access Control - IP Security - Internet Key Exchange (IKE).
Transport-Level Security: Web Security Considerations, Secure Sockets Layer, Transport Layer
Security, HTTPS standard, Secure Shell (SSH) application.
UNIT IV APPLICATION LAYER SECURITY 5
Electronic Mail Security: Pretty Good Privacy, S/MIME, DomainKeys Identified Mail. Wireless
Network Security: Mobile Device Security
UNIT V SECURITY PRACTICES 6
Firewalls and Intrusion Detection Systems: Intrusion Detection Password Management, Firewall
Characteristics Types of Firewalls, Firewall Basing, Firewall Location and Configurations.
Blockchains, Cloud Security and IoT security
30 PERIODS
PRACTICAL EXERCISES: 30 PERIODS
1. Implement symmetric key algorithms
2. Implement asymmetric key algorithms and key exchange algorithms
3. Implement digital signature schemes
4. Installation of Wire shark, tcpdump and observe data transferred in client-server communication
using UDP/TCP and identify the UDP/TCP datagram.
5. Check message integrity and confidentiality using SSL
6. Experiment Eavesdropping, Dictionary attacks, MITM attacks 163
7. Experiment with Sniff Traffic using ARP Poisoning
8. Demonstrate intrusion detection system using any tool.
9. Explore network monitoring tools
10. Study to configure Firewall, VPN
COURSE OUTCOMES:
At the end of this course, the students will be able:
CO1: Classify the encryption techniques
CO2: Illustrate the key management technique and authentication.
CO3 Evaluate the security techniques applied to network and transport layer
CO4: Discuss the application layer security standards.
CO5: Apply security practices for real time applications.
TOTAL:60 PERIODS
TEXT BOOKS:
1. Cryptography and Network Security: Principles and Practice, 6th Edition, William Stallings,
2014, Pearson, ISBN 13:9780133354690.
REFERENCES:
1. Network Security: Private Communications in a Public World, M. Speciner, R. Perlman, C.
Kaufman, Prentice Hall, 2002.
2. Linux iptables Pocket Reference, Gregor N. Purdy, O'Reilly, 2004, ISBN-13: 978- 0596005696.
3. Linux Firewalls, by Michael Rash, No Starch Press, October 2007, ISBN: 978-1-59327-141- 1.
4. Network Security, Firewalls And VPNs, J. Michael Stewart, Jones & Bartlett Learning, 2013,
ISBN-10: 1284031675, ISBN-13: 978-1284031676.
5. The Network Security Test Lab: A Step-By-Step Guide, Michael Gregg, Dreamtech Press, 2015,
ISBN-10:8126558148, ISBN-13: 978-8126558148.
INDEX
AIM:
To implement a program for encrypting a plain text and decrypting a cipher text using
Caesar Cipher (shift cipher) substitution technique
ALGORITHM DESCRIPTION:
PROGRAM:
import java.util.*;
class caesarCipher
{
if (Character.isLetter(i))
{
if (Character.isUpperCase(i))
{
encoded.append((char) ('A' + (i - 'A' + offset) % 26 ));
}
else
{
encoded.append((char) ('a' + (i - 'a' + offset) % 26 ));
}
}
else
{
encoded.append(i);
}
}
return encoded.toString();
}
public static String decode(String enc, int offset)
{
return encode(enc, 26-offset);
}
public static void main (String[] args) throws java.lang.Exception
{
System.out.println(caesarCipher.encode(msg, 12));
stdin:
Standard input is empty
stdout:
simulation of Caesar Cipher
input message : Hello welcome to Security Laboratory
encoded message : Tqxxa iqxoayq fa Eqogdufk Xmnadmfadk
decoded message : Hello welcome to Security Laboratory
RESULT:
Thus the program was executed and verified successfully.
EX.No.:1(b) PLAY FAIR CIPHER
AIM:
To implement a program to encrypt a plain text and decrypt a cipher text using play fair
Cipher substitution technique.
ALGORITHM DESCRIPTION:
import java.awt.Point;
import java.util.*;
class playfairCipher
{
private static char[][] charTable;
private static Point[] positions;
}
}
}
private static String codec(StringBuilder txt, int dir)
{
int len = txt.length();
for (int i = 0; i < len; i += 2)
{
char a = txt.charAt(i);
char b = txt.charAt(i + 1);
int row1 = positions[a - 'A'].y;
int row2 = positions[b - 'A'].y;
int col1 = positions[a - 'A'].x;
int col2 = positions[b - 'A'].x;
if (row1 == row2)
{
col1 = (col1 + dir) % 5;
col2 = (col2 + dir) % 5;
}
else if (col1 == col2)
{
row1 = (row1 + dir) % 5;
row2 = (row2 + dir) % 5;
}
else
{
int tmp = col1;
col1 = col2;
col2 = tmp;
}
txt.setCharAt(i, charTable[row1][col1]);
txt.setCharAt(i + 1, charTable[row2][col2]);
}
return txt.toString();
}
private static String encode(String s)
{
StringBuilder sb = new StringBuilder(s);
for (int i = 0; i < sb.length(); i += 2)
{
if (i == sb.length() - 1)
{
sb.append(sb.length() % 2 == 1 ? 'X' : "");
}
else if (sb.charAt(i) == sb.charAt(i + 1))
{
sb.insert(i + 1, 'X');
}
}
return codec(sb, 1);
}
}
}
stdin:
Standard input is empty
stdout:
simulation of Playfair Cipher
input message : CRYPTOLABS
encoded message : MBENKNPRKC
decoded message : CRYPTOLABS
RESULT:
Thus the program was executed and verified successfully.
EX.No.:1(c) HILL CIPHER
AIM:
To implement a program to encrypt and decrypt using the Hill cipher substitution
technique
ALGORITHM DESCRIPTION:
PROGRAM :
import java.util.*;
class hillCipher
{
/* 3x3 key matrix for 3 characters at once */
public static int[][] keymat = new int[][]
{ { 1, 2, 1 }, { 2, 3, 2 }, { 2, 2, 1 } };
/* key inverse matrix */
public static int[][] invkeymat = new int[][]
{ { -1, 0, 1 }, { 2, -1, 0 }, { -2, 2, -1 } };
public static String key = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static String encode(char a, char b, char c)
{
String ret = "";
int x,y, z;
b = key.charAt(y%26);
c = key.charAt(z%26);
ret = "" + a + b + c;
return ret;
}
private static String decode(char a, char b, char c)
{
String ret = "";
int x,y,z;
int posa = (int)a - 65;
int posb = (int)b - 65;
int posc = (int)c - 65;
x = posa * invkeymat[0][0]+ posb * invkeymat[1][0] + posc * invkeymat[2][0];
y = posa * invkeymat[0][1]+ posb * invkeymat[1][1] + posc * invkeymat[2][1];
z = posa * invkeymat[0][2]+ posb * invkeymat[1][2] + posc * invkeymat[2][2];
a = key.charAt((x%26<0) ? (26+x%26) : (x%26));
b = key.charAt((y%26<0) ? (26+y%26) : (y
%26)); c = key.charAt((z%26<0) ? (26+z%26) :
(z%26)); ret = "" + a + b + c;
return ret;
}
{
enc += encode(pdchars[i], pdchars[i+1], pdchars[i+2]);
}
stdin:
Standard input is empty
stdout:
simulation of Hill Cipher
input message : SecurityLaboratory
padded message : SECURITYLABORATORY
encoded message : EACSDKLCAEFQDUKSXU
decoded message : SECURITYLABORATORY
RESULT:
Thus the program was executed and verified successfully.
EX.No.:1(d) VIGENERE CIPHER
AIM:
To implement a program for encryption and decryption using vigenere cipher substitution
technique
ALGORITHM DESCRIPTION:
}
return res;
}
static String decode(String text, final String key)
{
String res = "";
text = text.toUpperCase();
for (int i = 0, j = 0; i < text.length(); i++) {
char c = text.charAt(i);
stdin:
Standard input is empty
stdout:
simulation of Vigenere Cipher
input message : SecurityLaboratory
encoded message : NMIYEMKCNIQVVROWXC
decoded message : SECURITYLABORATORY
RESULT:
Thus the program was executed and verified successfully.
EX.No.:1(e) RAIL FENCE CIPHER
AIM:
To implement a program for encryption and decryption using rail fence transposition
technique.
ALGORITHM DESCRIPTION:
In the rail fence cipher, the plaintext is written downwards and diagonally on successive
"rails" of an imaginary fence, then moving up when we reach the bottom rail.
When we reach the top rail, the message is written downwards again until the whole
plaintext is written out.
The message is then read off in rows.
PROGRAM :
import java.util.*;
class railfenceCipherHelper
{
int depth;
String encode(String msg, int depth) throws Exception
{
int r = depth;
int l = msg.length();
int c = l/depth;
int k = 0;
char mat[][] = new char[r][c];
String enc = "";
for (int i=0; i<c; i++)
{
for (int j=0; j<r; j++)
{
if (k != l)
{
mat[j][i] = msg.charAt(k++);
}
else
{
mat[j][i] = 'X';
}
}
}
for (int i=0; i<r; i++)
{
for (int j=0; j<c; j++)
{
enc += mat[i][j];
}
}
return enc;
}
String decode(String encmsg, int depth) throws Exception
{
int r = depth;
int l = encmsg.length();
int c = l/depth;
int k = 0;
char mat[][] = new char[r][c];
String dec = "";
for (int i=0; i<r; i++)
{
for (int j=0; j< c; j++)
{
mat[i][j] = encmsg.charAt(k++);
}
}
for (int i=0; i<c; i++)
{
for (int j=0; j< r; j++)
{
dec += mat[j][i];
}
}
return dec;
}
}
class railfenceCipher
{
public static void main (String[] args) throws java.lang.Exception
{
railfenceCipherHelper rf = new railfenceCipherHelper();
String msg, enc, dec;
msg = "hellorailfencecipher";
int depth = 2;
enc = rf.encode(msg, depth);
dec = rf.decode(enc, depth);
System.out.println("simulation of Railfence Cipher");
System.out.println("input message : " + msg);
System.out.println("encoded message : " + enc);
System.out.printf( "decoded message : " + dec);
}
}
stdin:
Standard input is empty
stdout:
simulation of Railfence Cipher
input message : hellorailfencecipher
encoded message : hloaleccpeelrifneihr
decoded message : hellorailfencecipher
RESULT:
Thus the program was executed and verified successfully.
EX.No.:2(a) DATA ENCRYPTION STANDARD (DES)
AIM:
ALGORITHM DESCRIPTION:
PROGRAM:
DES :-
import javax.swing.*;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.util.Random ;
class DES {
byte[] skey = new byte[1000];
String skeyString;
static byte[] raw;
String inputMessage,encryptedData,decryptedMessage;
public DES() {
try
{ generateSymmetricKey
();
inputMessage=JOptionPane.showInputDialog(null,"Enter message to encrypt");
byte[] ibyte = inputMessage.getBytes();
byte[] ebyte=encrypt(raw, ibyte);
String encryptedData = new String(ebyte);
System.out.println("Encrypted message "+encryptedData);
JOptionPane.showMessageDialog(null,"Encrypted Data "+"\n"+encryptedData);
byte[] dbyte= decrypt(raw,ebyte);
String decryptedMessage = new String(dbyte);
System.out.println("Decrypted message "+decryptedMessage);
JOptionPane.showMessageDialog(null,"Decrypted Data "+"\n"+decryptedMessage);
}
catch(Exception e)
{ System.out.println(
e);
}
}
void generateSymmetricKey() {
try {
Random r = new Random();
intnum = r.nextInt(10000);
String knum = String.valueOf(num);
byte[] knumb = knum.getBytes();
skey=getRawKey(knumb);
skeyString = new String(skey);
System.out.println("DES Symmetric key = "+skeyString);
}
catch(Exception e)
{ System.out.println(
e);
}
}
private static byte[] getRawKey(byte[] seed) throws Exception
{ KeyGeneratorkgen = KeyGenerator.getInstance("DES");
SecureRandomsr = SecureRandom.getInstance("SHA1PRNG");
sr.setSeed(seed);
kgen.init(56, sr);
SecretKeyskey = kgen.generateKey();
raw = skey.getEncoded();
return raw;
}
private static byte[] encrypt(byte[] raw, byte[] clear) throws Exception {
SecretKeySpecskeySpec = new SecretKeySpec(raw, "DES");
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(clear);
return encrypted;
}
private static byte[] decrypt(byte[] raw, byte[] encrypted) throws Exception {
SecretKeySpecskeySpec = new SecretKeySpec(raw, "DES");
Cipher cipher = Cipher.getInstance("DES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] decrypted = cipher.doFinal(encrypted);
return decrypted;
}
public static void main(String args[]) {
DES des = new DES();
}
}
OUTPUT:
RESULT:
Thus the program was executed and verified successfully.
EX.No.:2(b) RSA ALGORITHM
AIM:
Develop a program to implement RSA algorithm for encryption and decryption. This
cryptosystem is one the initial system. It remains most employed cryptosystem even today. The
system was invented by three scholars Ron Rivest, Adi Shamir, and Len Adleman and hence,
it is termed as RSA cryptosystem. The two aspects of the RSA cryptosystem, firstly generation
of key pair and secondly encryption-decryption algorithms
ALGORITHM DESCRIPTION:
class rsaAlg
{
private BigInteger p, q, n, phi, e, d; /* public key components */
private int bitLen = 1024;
private int blkSz = 256; /* block size in bytes */
private Random rand;
phi = p.subtract(BigInteger.ONE).multiply(q.subtract(BigInteger.ONE));
e = BigInteger.probablePrime(bitLen/2, rand);
while (phi.gcd(e).compareTo(BigInteger.ONE) > 0 &&
e.compareTo(phi) < 0)
{
dd(BigInteger.ONE);
}
d = e.modInverse(phi);
}
public rsaAlg (BigInteger e, BigInteger d, BigInteger n)
{
this.e = e;
this.d = d;
this.n = n;
}
public static void main (String[] args) throws java.lang.Exception
{
rsaAlg rsaObj = new rsaAlg();
String msg = "Hello world! Security Laboratory";
System.out.println("simulation of RSA algorithm");
System.out.println("message(string) : " + msg);
System.out.println("message(bytes) : " +
bytesToString(msg.getBytes()));
/* encrypt test message */
byte[] ciphertext = rsaObj.encrypt(msg.getBytes());
System.out.println("ciphertext(bytes) : " + bytesToString(ciphertext));
/* decrypt ciphertext */
byte[] plaintext = rsaObj.decrypt(ciphertext);
System.out.println("plaintext(bytes) : " + bytesToString(plaintext));
System.out.println("plaintext(string) : " + new String(plaintext));
}}
stdin:
Standard input is empty
stdout:
SIMULATION OF RSA ALGORITHM
message(string) : Hello world! Security Laboratory
message(bytes) :
721011081081113211911111410810033328310199117114105116121327697981111149711611
1114121
ciphertext(bytes) : 0-119-42-9610376-981195-8810516-1281042-9-38-23-74856644-
2510705766-94-2310310452-2674-46125-13561120-2616122-111-507-117-5621-962-57-127-9-
93-537810108-50355612715733-31-10510732-106-6050-8666-2612570113357436822-46-
7169-402411558-42-11141-50-872210997-61-84-2627-84-36-55-56-1255440196847-60-
625450-19-35123-901541-126-109-7-5300-117618634-51-67-90-113121-88-10234124-61198-
24-26741167-568553-43-38873646-1105-21-77-1116358-120-47-98-1-110-97-31-125-113108-
91-998312234-27-29-11278-6011241-9944-6676-20-9225-12796-48-52-75-117-27-884-815-
648511153383676-158-116-8573120-87-4467104-9784108111-54830-61-90-38-11223-119-
4210510-18-20-4090-85-104-8561-120-49-12-120108-23-48-4945-102
plaintext(bytes) :
721011081081113211911111410810033328310199117114105116121327697981111149711611
1114121
plaintext(string) : Hello world! Security Laboratory
RESULT:
Thus the program was executed and verified successfully.
EX.No.:2(c) DIFFIEE HELLMAN KEY EXCHANGE ALGORITHM
AIM:
ALGORITHM
PROGRAM :
import java.util.*;
class diffieHellmanAlg
{
public static void main (String[] args) throws java.lang.Exception
{
int p = 11; /* publicly known (prime number) */
int g = 2; /* publicly known (primitive root) */
int x = 9; /* only Alice knows this secret */
int y = 4; /* only Bob knows this secret */
double aliceSends = (Math.pow(g,x))%p;
stdout:
simulation of Diffie-Hellman key exchange algorithm
aliceSends : 6.0
bobComputes : 9.0
bobSends : 5.0
aliceComputes : 9.0
sharedSecret : 9.0
success: shared secrets matches! 9.0
RESULT:
Thus the program was executed and verified successfully.
EX.No.: 3 IMPLEMENT MESSAGE DIGEST ALGORITHM (MD5)
AIM:
Develop a program to implement Message Digest Algorithm.
ALGORITHM DESCRIPTION:
The MD5 message-digest algorithm is a widely used cryptographic hash function
producing a 128-bit (16-byte) hash value, typically expressed in text format as a 32-digit
hexadecimal number.
MD5 has been utilized in a wide variety of cryptographic applications and is also
commonly used to verify data integrity
PROGRAM:
import java.util.*;
class md5Alg
{
/* initialize variables A,B,C,D */
private static final int INIT_A = 0x67452301;
private static final int INIT_B =
(int)0xEFCDAB89L; private static final int INIT_C
= (int)0x98BADCFEL; private static final int
INIT_D = 0x10325476;
/* per-round shift amounts */
private static final int[] SHIFT_AMTS = { 7, 12, 17, 22,
5, 9, 14, 20,
4, 11, 16, 23,
6, 10, 15, 21 };
/* binary integer part of sin's of integers (Radians) as constants */
private static final int[] TABLE_T = new int[64];
static
for (int i = 0; i < 64; i++)
{
TABLE_T[i] = (int)(long)((1L << 32) * Math.abs(Math.sin(i + 1)));
}
}
/* compute message digest (hash value) */
public static byte[] computeMd5(byte[] msg)
{
int msgLenBytes = msg.length; /* msg length (bytes) */
long msgLenBits = (long)msgLenBytes << 3; /* msg length (bits) */
int numBlks = ((msgLenBytes + 8) >>> 6) + 1; /* number of blocks */
int totLen = numBlks << 6; /* total length */
byte[] padB = new byte[totLen - msgLenBytes]; /* padding bytes */
/* pre-processing with padding */
padB[0] = (byte)0x80;
for (int i = 0; i < 8; i++)
{
padB[padB.length - 8 + i] = (byte)msgLenBits;
msgLenBits >>>= 8;
}
int a = INIT_A;
int b = INIT_B;
int c = INIT_C;
int d =
INIT_D;
}
/* initialize hash value for this chunk */
int origA = a;
int origB = b;
int origC = c;
int origD =
d;
{
case 0:
{
f = (b & c) | (~b & d);
break;
}
case 1:
{
b = temp;
}
/* add this chunk's hash to result so far */
a += origA;
b += origB;
c += origC;
d += origD;
}
byte[] md5 = new byte[16];
int cnt = 0;
for (int i = 0; i < 4; i++)
{
int n = (i == 0) ? a : ((i == 1) ? b : ((i == 2) ? c : d));
for (int j = 0; j < 4; j++)
{
md5[cnt++] = (byte)n;
n >>>= 8;
}
}
return md5;
}
public static String toHexString(byte[] b)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < b.length; i++)
{
sb.append(String.format("%02x", b[i] & 0xFF));
}
return sb.toString();
}
public static void main (String[] args) throws java.lang.Exception
{
String msg = "hello world";
System.out.println("simulation of MD5 algorithm");
System.out.println("input msg : " + msg);
stdin:
Standard input is empty
stdout:
simulation of MD5 algorithm
input msg : hello world
md5 hash : 5eb63bbbe01eeed093cb22bb8f5acdc3
RESULT:
Thus the program was executed and verified successfully.
EX.No.: 4 IMPLEMENT SECURE HASH FUNCTION (SHA)
AIM:
ALGORITHM DESCRIPTION:
Output:
H0, H1, H2, H3, H4, H5: Word buffers with final message digest
PROGRAM :
import java.security.*;
public class SHA1 {
public static void main(String[] a) {
try {
MessageDigest md = MessageDigest.getInstance("SHA1");
System.out.println("Message digest object info: ");
System.out.println(" Algorithm = " +md.getAlgorithm());
System.out.println(" Provider = " +md.getProvider());
System.out.println(" ToString = " +md.toString());
String input = "";
md.update(input.getBytes());
byte[] output = md.digest();
System.out.println();
System.out.println("SHA1(\""+input+"\") = " +bytesToHex(output));
input = "abc";
md.update(input.getBytes());
output = md.digest();
System.out.println();
System.out.println("SHA1(\""+input+"\") = " +bytesToHex(output));
input = "abcdefghijklmnopqrstuvwxyz";
md.update(input.getBytes());
output = md.digest();
System.out.println();
System.out.println("SHA1(\"" +input+"\") = " +bytesToHex(output));
System.out.println(""); }
catch (Exception e)
{ System.out.println("Exception: " +e);
}
}
public static String bytesToHex(byte[] b) {
char hexDigit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
StringBuffer buf = new StringBuffer();
for (int j=0; j<b.length; j++)
{ buf.append(hexDigit[(b[j] >> 4) &
0x0f]); buf.append(hexDigit[b[j] &
0x0f]); } return buf.toString(); }
}
OUTPUT:
RESULT:
Thus the program was executed and verified successfully.
EX.No.: 5 IMPLEMENT DIGITAL SIGNATURE SCHEME
AIM:
PROGRAM :
import java.util.*;
import java.math.BigInteger;
class dsaAlg
{
final static BigInteger one = new BigInteger("1");
final static BigInteger zero = new BigInteger("0");
/* incrementally tries for next prime */
public static BigInteger getNextPrime(String ans)
{
BigInteger test = new BigInteger(ans);
while (!test.isProbablePrime(99))
{
test = test.add(one);
}
return test;
}
/* finds largest prime factor of n */
public static BigInteger findQ(BigInteger n)
{
BigInteger start = new BigInteger("2");
while (!n.isProbablePrime(99))
{
while (!((n.mod(start)).equals(zero)))
{
start = start.add(one);
}
n = n.divide(start);
}
return n;
}
/* finds a generator mod p */
public static BigInteger getGen(BigInteger p,
BigInteger q,
Random r)
{
BigInteger h = new BigInteger(p.bitLength(), r);
h = h.mod(p);
return h.modPow((p.subtract(one)).divide(q), p);
}
public static void main (String[] args) throws java.lang.Exception
{
Random randObj = new Random();
/* establish the global public key components */
BigInteger p = getNextPrime("10600"); /* approximate prime */
BigInteger q = findQ(p.subtract(one));
BigInteger g = getGen(p,q,randObj);
/* public key components */
System.out.println("simulation of Digital Signature Algorithm");
System.out.println("global public key components are:");
System.out.println("p is: " + p);
BigInteger u1 = (hashVal.multiply(w)).mod(q);
BigInteger u2 = (r.multiply(w)).mod(q);
BigInteger v = (g.modPow(u1,p)).multiply(y.modPow(u2,p));
v = (v.mod(p)).mod(q);
System.out.println("verifying digital signature (checkpoints):");
System.out.println("w is : " + w);
stdin:
Standard input is empty
stdout:
simulation of Digital Signature Algorithm
global public key components are:
p is: 10601
q is: 53
g is: 3848
secret information are:
x (private) is: 48
k (secret) is: 25
y (public) is: 5885
h (rndhash) is: 8794
generating digital signature:
r is : 4
s is : 16
verifying digital signature (checkpoints):
w is : 10
u1 is : 13
u2 is : 40
v is : 4
success: digital signature is verified! 4
RESULT:
Thus the program was executed and verified successfully.
EX.No.: 6 INSTALL ROOTKITS AND STUDY VARIETY OF OPTIONS
AIM:
Rootkit is a stealth type of malicious software designed to hide the existence of certain process
from normal methods of detection and enables continued privileged access to a computer
DESCRIPTION :
Root kit is a stealth type of malicious software designed to hide the existence of certain process
from normal methods of detection and enables continued privileged access to a computer.
Download Rootkit Tool from GMER website. www.gmer.net
This displays the Processes, Modules, Services, Files, Registry, RootKit/Malwares,
Autostart, CMD of local host.
Select Processes menu and kill any unwanted process if any. Modules menu displays the
various system files like .sys, .dll
Services menu displays the complete services running with Autostart, Enable, Disable,
System, Boot.
Files menu displays full files on Hard-Disk volumes.
Registry displays Hkey_Current_user and Hkey_Local_Machine. Rootkits/Malawares
scans the local drives selected.
Autostart displays the registry base Autostart applications.
CMD allows the user to interact with command line utilities or Registry.
RESULT:
Thus the program was executed and verified successfully.
SETUP A HONEY POT AND MONITOR THE HONEYPOT ON
EX.No.: 7
NETWORK
AIM:
Honey Pot is a device placed on Computer Network specifically designed to capture
malicious network traffic. KF Sensor is the tool to setup as honeypot when KF Sensor is running
it places a siren icon in the windows system tray in the bottom right of the screen. If there are no
alerts then green icon is displayed.
STEPS:
1. Install winpcap library (mandatory for kfsensor)
2.Download kfsensor and install
3.Then restart your pc.Configure properly no change needs to do now go to setting option and
configure according to your attack.
4.Now go to your home screen of kf sensor
5.You will get some logs about clients.And it will start working
KFSensor
Windows based honeypot known as KF Sensor
A machine running KFSensor can be treated as just another server on the network,
without the need to make complex changes to routers and firewalls.
By doing this it sets up a target, or a honeypot server, that will record the actions of a
hacker.
It listens to both TCP and UDP ports on the server machine and interacts with visitors
and generates events.
A daemon that runs at the background (like Unix daemon)
Using it you can configure the KFSensor Server and monitor the events generated by
the KFSensor Server.
Sim Server
Sim server is short for simulated server.
There are two types of Sim Server available; the Sim Banner and the Sim
Standard Server.
Setting Up a HoneyPot
• Install WinPCap
• Install KFSensor
KFSensor Monitor
Terminology
Visitor
• Visitors could be hackers, worms, viruses or even legitimate users that have
stumbled onto KFSensor by mistake.
KFSensor. Event
• For example if a visitor attempts to connect to the simulated web server then an
event detailing the connection is generated.
• Events are recorded in the log file and displayed in the KFSensor monitor.
Editing Scenario
Terminology – Rules
• All of the data that was produced was the result of KFSensor detecting certain types
of activity and then using a rule to determine what type of action should be taken.
– Scenario menu ->select the Edit Active Scenario command ->you will see a
dialog box which contains a summary of all of the existing rules.
– either select a rule and click the Edit button to edit a rule, or you can click the
Add button to create a new rule.
Adding a rule
• Click the Add button and you will see the Add Listen dialog box.
– `The first thing that this dialog box asks for is a name. This is just a name for the
rule.
– Pick something descriptive though, because the name that you enter is what will
show up in the logs whenever the rule is triggered.
Download Link
• http://www.keyfocus.net/kfsensor/free-trial/
Installing KFSensor
KFSensor
3. Enable Telnet client, server, Internet Information server in Control Panel-> Programs-> Turn
windows features on/off
* choose the respective service listed in the dialog box opened and press
convert to native button and ok.
Setting up Server
1. To start the server
• Go through the wizard, give fictitious mail ids when they are asked and start the
server running by pressing the finish button.
FTP Emulation
1. Open command prompt
2. Type
Ftp ipaddress
4. Right click KFSensor entry, select Event details, see the details captured by the server
5. Create visitor rule by right clicking the FTP entry and check either ignore / close under
actions in the dialog box that opened.
6. Now redo the above said operations at the command prompt and see how the
emulation behaves.
7. You can see/ modify the created rules in Scenario->edit active visitor rules.
SMTP Emulation
1. open command prompt
2. Type telnet
ipaddress 25 Helo
Mail from:<mail-id>
Rcpt to:<mail-id>
Data
IIS emulation
1. Create an index.html, store it in c:\keyfocus\kfsensor\files\iis7\wwwroot
2. Make sure index.html is in first place in the listed htm files in the dialog box
3. Check the kfsensor for the captured information.
DOS attack
1. Settings-> DOS attack settings modify (reduce) values in general tab, ICMP and
other tabs. Press ok.
1. Check the kfsensor for the DOS attack alerts, open event details in right click menu for
further details.
RESULT:
Thus the program was executed and verified successfully.
PERFORM WIRELESS AUDIT ON AN ACCESS POINT OR A
EX.No.: 8
ROUTER AND DECRYPT WEP AND WPA
AIM:
NetStumbler (also known as Network Stumbler) aircrack on ubuntu is a tool for windows
that facilitates detection of Wireless LANs using the 802.11b, 802.11a and 802.11g WLAN
standards. It is one of the Wi-Fi hacking tool which only compatible with windows; this tool also
a freeware. With this program, we can search for wireless network which open and infiltrate the
network. It’s having some compatibility and network adapter issues.
DESCRIPTION :
NetStumbler (Network Stumbler) is one of the Wi-Fi hacking tool which only
compatible with windows, this tool also a freeware.
With this program, we can search for wireless network which open and infiltrate the
network.
Its having some compatibility and network adapter issues.
If you are using the Windows version of Wireshark and you have an AirPcap adapter
you can add decryption keys using the wireless toolbar.
If the toolbar isn't visible, you can show it by selecting View->Wireless Toolbar.
Click on the Decryption Keys. button on the toolbar:
This will open the decryption key management window.
As shown in the window you can select between three decryption modes: None,
Wireshark, and Driver:
RESULT:
Thus the program was executed and verified successfully.
DEMONSTRATE INTRUSION DETECTION SYSTEM (IDs) USING
EX.No.: 9
ANY TOOL (SNORT OR ANY OTHER S/W)
AIM:
Snort is an open source network intrusion detection system (NIDS) has the ability to
perform real-time traffic analysis and packet logging on internet protocol (IP) networks. Snort
performs protocol analysis, content searching and matching. Snort can be configured in three
main modes: sniffer, packet logger, and network intrusion detection.
Description:
Snort Installation Steps
Getting and Installing Necessary Tools
Installaing Packages
Snort: <Snort_2_9_8_2_installer.exe>
WinPcap: <WinPcap_4_1_3.exe>
Snort rules: <snortrules-snapshot-2982.tar.gz>
Once Completed
1.Change the Snort program directory:
<c:\cd \Snort\bin
2.Check the installed version for Snort:
<c:\Snort\bin> snort -V
3.Check to see what network adapters are on your system
<c:\Snort\bin> snort -W>
Configure Snort with snort.conf
<snort.conf> is located in <c:\Snort\ect>
Contains nine steps:
1.Set the network variables
a. Change <HOME_NET> to your home network IP address range <10.6.2.1/24>
b. Change <EXTERNAL_NET> to <!$HOME_NET>
This expression means the external network will be defined as - any IP not part of home
network
c. Check for <HTTP_PORTS>
d. Change var <RULE_PATH> - actual path of rule files. i.e <c:\Snort\rules>
e. Change var <PREPROC_RULE_PATH> - actual path of preprocessor rule files
i.e <c:\Snort\preproc_rules>
f. Comment <#> <SO_RULE_PATH> - as windows Snort doesn't use shared object
rules
g. Configure trusted <white.list> and untrusted <black.list> IP address - reputation
preprocessor
2.Configure the decoder
a. No changes in this part
b. Set the default directory for Snort logs i.e <c:\Snort\logs>
3.Configure the base detection engine
a. No changes in this part
4.Configure dynamic loaded libraries
a. Change the dynamic loaded library path references
i.e. <dynamicpreprocess direc c:\Snort\lib\snort_dynamicpreprocessor>
i.e. <dynamicengine direc c:\Snort\lib\snort_dynamicengine\sf_engine.dll>
b. Comment out <dynamicdetection directory>
declaration 5.Configure preprocessors
a. Many Preprocessors are used by Snort - Check Snort manual before setting them.
b. Comment on <inline packet normalization preprocessor>
This preprocessor is used when Snort is in-line IPS mode>
c. For general purpose Snort usage - check these preprocessors are active
frag3
stream5
http_inpect
ftp_telnet
smtp
dns
ssl
sensitive_data
6.Confgiure output plugins
a. Be default Snort uses only one output plugings - <default:unified2>
b. Want to use Syslog output pluging - activate it by uncommenting.
1. Uncomment and edit the syslog output line
<output alert_syslog: host=127.0.0.1:514, LOG_AUTH LOG_ALERT>
Note: If you are going to use syslog - install <Syslog Server>
c. Uncomment metadata reference lines
<include classification.config and include reference.config>
7.Customise your rule set
a. Initial test, reduce the number of rules loaded at start-up, uncomment <local.rules>
b. First time users, comment most of include statements.
8.Customise preprocessor and decoder rule set
a. Uncomment the first two lines in Step 8
<include $PREPROC_RULE_PATH\preprocessor.rules>
<include $PREPROC_RULE_PATH\decoder.rules>
b. If you enables the sensitive_data preprocessor <step 5> uncomment
<include $PREPROC_RULE_PATH\sensitive-data.rules>
c. Make sure rules you declare - available in <c:\Snort\preproc_rules>
9.Customise shart object rule set
a. Comment on lines
b. Uncomment <include threshold.conf>
Generating Alerts
This is for validation of Snort
1. Open <local.rules> in a text editor
2. Start typing this:
<alert icmp any any -> any any (msg:"ICMP Testing Rule"; sid:1000001; rev:1;)
<alert tcp any any -> any 80 (msg:"TCP Testing Rule"; sid:1000002; rev:1;)
<alert udp any any -> any any (msg:"UDP Testing Rule"; sid:1000003; rev:1;)
3. Save as <local.rules>
4. Open <CMD> and run it as <ADMINISTRATOR>
5. Start Snort <c:\Snort\bin> snort -i 2 -c c:\Snort\etc\snort.conf -A console
6. Open <CMD> no need to be an ADMINISTRATOR
7. Send a <PING> command to your local gateway: <c:\> ping 10.6.0.1>
8. Open a web browser and browse to any web page
You can see the alerts Snort produces and shows it in First terminal.
RESULT:
Thus the program was executed and verified successfully.