java cryptography
DESCRIPTION
JAVA Cryptography. 4 장 Random Number 프로그래밍 언어 실험실 석사 3 학기 박중기. 목차. SecureRandom Self-Seeding Keyboard Timing SeederDialog. Random Number. pseudo-random number: 필연적으로 주기성이 발생하는 난수 PRNG : pseudo-random number generator seed : 의사 - 난수를 발생시킬 때의 초기값. SecureRandom. - PowerPoint PPT PresentationTRANSCRIPT
-
JAVA Cryptography4 Random Number
3
-
SecureRandomSelf-SeedingKeyboard TimingSeederDialog
-
Random Numberpseudo-random number: PRNG : pseudo-random number generatorseed : -
-
SecureRandomjava.util.Random PRNG , , .
-
SecureRandom (contd)java.security.SecureRandom PRNG, JDK1.1 SHA-1 SecureRandom seed - , PRNG .
-
SecureRandom (contd)SecureRandom SecureRandom nextBytes() 100bytes - SecureRandom sr = new SecureRandom();byte[] pseudoRandom = new byte[100];sr.nextBytes(pseudoRandom);
-
SecureRandom (contd) SecureRandom constructors:public SecureRandom()SecureRandom seed public SecureRandom(byte[] seed) SecureRandom
-
SecureRandom (contd) , setSeed() SecureRandom public synchronized void setSeed(byte[] seed)SecureRandom - , nextBytes() public synchronized void nextBytes(byte[] bytes) -
-
Self-SeedingSecureRandom seed , . thread seed seed . () , .
-
Keyboard TimingSecureRandom seed . PGP(Pretty Good Privacy) keystroke , . .
-
SeederKeyEvents seed .Seeder . KeyListener interface package oreilly.jonathan.util;import java.awt.AWTEventMulticaster;import java.awt.event.*;public class Seeder implements KeyListener {
-
Seeder (contd) protected byte[] mSeed; //mSeed seed protected int mBitIndex; // protected boolean mDone; // seed indicate protected char mLastKeyChar; // // protected ActionListener mListenerChain; protected Counter mCounter; // //
-
Seeder (contd)public Seeder (int seedBytes) {reset(seedBytes);} // , reset() public void reset(int seedBytes) { mSeed = new byte[seedBytes]; mBitIndex = seedBytes * 8 -1; mDone = false; mLastKeyChar = '\0'; mListenerChain = null; // reset() Seeder
-
Seeder (contd) public byte[] getSeed() { return mSeed;} public int getBitLength() { return mSeed.length * 8;} // Seeder public int getCurrentBitIndex(){ return mSeed.length * 8 - 1 - mBitIndex; } //mBitIndex public void addActionListener (ActionListener al) { mListenerChain = AWTEventMulticaster.add(mListenerChain, al); } // seed public void removeActionListener (ActionListener al){ mListenerChain = AWTEventMulticaster.remove(mListenerChain, al); } // seed
-
Seeder (contd) public void keyPressed(KeyEvent ke) {} public void keyReleased(KeyEvent ke) {} public void keyTyped(KeyEvent ke) { char keyChar = ke.getKeyChar(); if (keyChar != mLastKeyChar) grabTimeBit(); mLastKeyChar = keyChar; }Seeder KeyListener . keyTyped() grabTimeBit()
-
Seeder (contd) protected void grabTimeBit() { if (mDone) return; int t = mCounter.getCount(); //Counter count int bit = t & 0x0001; //
if (bit != 0) { int seedIndex = mBitIndex / 8; int shiftIndex = mBitIndex % 8; mSeed[seedIndex] |= (bit
-
Seeder (contd) mBitIndex--; if (mBitIndex < 0) { mCounter.stop(); mBitIndex = 0; // Reset this so getCurrentBitIndex() works. mDone = true; // seed if (mListenerChain != null) { mListenerChain.actionPerformed( new ActionEvent (this, 0, "Your seed is ready.")); } } } }
-
Seeder (contd)Seeder 3Seeder Seeder s = new Seeder(20);KeyEvents Seeder .theComponent.addKeyListener(s);ActionEvent s.addActionListener(this);
-
AWTEventMulticasterSeeder ActionListener , .AWTEventMulticaster listener , ActionListeners ActionLister . ActionListener mListenerChain .
-
PitfallsSeeder Counter Seeder . . ., interval , .
-
Pitfalls (contd)random . http://random.mat.sbg.ac.at/Salzbug, random http://www.cs.berkeley.edu/~daw/netscape-randomness.html, , , http://lavarand.sgi.com/Lava Lites
-
SeederDialogSeed SeederDialog sd = new SeederDialog(this, 20);sd.show();byte[] seed = sd.getSeed();
-
SeederDialog (contd)Source Codepackage oreilly.jonathan.awt;
import java.awt.*;import java.awt.event.*;
import oreilly.jonathan.util.*;
public class SeederDialog extends Dialog implements ActionListener, KeyListener {
ProgressBar mProgressBar; Seeder mSeeder;
public SeederDialog(Frame parent, int seedBytes) { super(parent, "Seeder Dialog", true); setupWindow(seedBytes); }
-
SeederDialog (contd) public byte[] getSeed() { return mSeeder.getSeed(); } // Seeder seed
public void actionPerformed(ActionEvent ae) { dispose(); } // Seeder ActionEvent .
public void keyPressed(KeyEvent ke) {} public void keyReleased(KeyEvent ke) {} public void keyTyped(KeyEvent ke) { mProgressBar.setLevel(mSeeder.getCurrentBitIndex()); }
source code