2018년 3월 1일 목요일

시스템 보안

1. 내컴퓨터는 해킹이 당한적 있는가?
있다.

2. 컴퓨터를 하게되면 해킹을 당한다. 무엇을 이용해 해킹을 하는가?
인터넷이 가장 보편적. 사회적인 공격(주변인이 사전정보를 가지고 해킹)

3. 대응을 어떻게 해야하나?
보안프로그램 설치 및 업그레이드, 바이러스 삭제, 방화벽 사용, 암호 변경

4. 최근에 이슈가 된 해킹방법은?
랜섬웨어, 디도스

5. 리눅스는 무엇인가? 윈도우와 차이점은?
유료, 무료 클로즈소스, 오픈소스

6. 리눅스 서버가 하는 일은 무엇인가?


브로드캐스팅
모두에게 전달 1대 다수(전부)
유니캐스팅 
1대 1
멀티캐스팅 
1대 다수(그룹)
애니캐스팅
그룹장에게 전달 그룹장은 나머지 그룹원에게 전달

기본적으로 브로드캐스팅을 사용 해킹위험 높음

라우터
최적의 경로를 찾아 연결, 요즘 라우터는 게이트웨이 역할도 한다.

게이트웨이
네트워크와 네트워크끼리 연결



정보보안 자격증

6개의 질문
6개의 대답

2017년 12월 11일 월요일

네트워크 12월 12일 - 1

피켓트레이서

라우터 2911

2960 스위치

PC 서버

서버 DNS, MAIL, WEB, 방화벽 설정

2017년 12월 8일 금요일

자바 복소수

복소수 = 실수부 + 허수부

예) 3 + 2i, -1 - 2i

i = root(-1)
i*i = -1

복소수 합, 곱

(1+2i) + (2+3i) = 3 + 5i
(1+2i) * (2+3i) = 2 + 3i + 4i - 6 = -4 + 7i  // 분배법칙 적용

2017년 12월 7일 목요일

JAVA Student 클래스 만들기, String.format 메소드


class Student1 {
private String name;
private int rollno, age;

public void setName(String n) {
name = n;
}
public void setRollno(int r) {
rollno = r;
}
public void setAge(int a) {
age = a;
}
public String toString() {
return String.format("학생[%s:%d:%d]", name, rollno, age);
}

}


public class StudentTest {

public static void main(String[] args) {
Student1 s = new Student1();

s.setName("김현준");
s.setAge(24);
s.setRollno(1301081);

System.out.println(s);

}

}

2017년 12월 6일 수요일

네트워크 12월 07일 - 2

암호 보안 기술
원웨이 펑션으로 역으로 되돌리는데 컴퓨터 계산으로 10년 걸린다 한마디로 불가능
되돌릴거면 알고리즘을 안다 해도 키를 알아야 한다.

비밀키 = 대칭형, 대표적으로 DES, 암호키와 복호키가 동일, 키의 분배 문제가 있다.(키 분배의 어려움) 이걸 개선한것이 비 대칭형(공개키)
비 대칭형 = 잠그는거랑 푸는게 다르다. 대표적으로 RSA, 공개키 나에게 보낼 사람들은 공개된 키로 암호화를 해서 보낸다. 내가 가진 키로만 풀 수 있으니 비밀성 보장., 암호화와 복호화키가 다르니 키 분배 문제가 없다.
전자서명 = 키(개인키+공개키)를 이용하여 본인만 가지고 있는 키를 이용하여 본인 이라는걸 증명,
인증 = 인증과 권한을 헷갈리면 안됨, 인증을 위해 시스템에 접근하는 각 사용자가 권한이 있는 사용자인지 구분해야 하고, 각 사용자가 본인 여부를 확인하는 과정도 필요하다.
생체 인식 = 개인의 독특한 생체 정보(지문, 목소리, 홍채, 손의 정맥 등)를 패스워드로 활용하여 인증하는 방식.

메일 보안 기술
- 메일 자체를 암호화 하여 슈퍼유저라도 볼 수 없게 만든다.
PGP 보안성은 조금 취약하나 구현이 쉽다.
PEM - 표준형, 좀 더 강력하다



---------------------------------------------------------------------------------------
GN3 - 피켓트레이서 같은 프로그램인데 존나 무거움

2017년 12월 5일 화요일

네트워크 12월 06일 - 1

어플리케이션 보안
네트워크 보안

차단

가로채기 - 슬리핑 가는 정보를 도청

변조 - 문서를 바꿔서 전달
위조 - 권한을 바꿔 전달

IP 스푸핑 - ip주소를 속이는 행위 DHCP

IP 스푸핑을 차단하는 방법
- 엑세스 제어
- 필터링
- 암호화

IP 스니핑 - 데이터를 엿듣는 일종의 도청 행위 스위치가 나오고나서 많이 사라졌다. DHCP 스푸핑과 같이 사용해야 사용할만하다

SSL 시큐어 소켓 레이어
VPN 버추얼 프라이빗 네뜨웍

시스템 보안 기술 - 자기 자신 보안, 개인 방화벅, 침입 탐지 시스템, 침입 방지 시스템

방화벽 - 출입문과 비슷하다. 인증된 사용자만 들어오게 허용.
바왛벽의 기본 구성요소
네트워크 정책 - ICMP 프로토콜 차단 등
방화벽 사용자 인증 시스템 - 아디 로그인 같이 이용
패킷 필터링, 응용 계층 게이트웨이


바오하벽의 일반적인 사용 방법은 스크리닝 라우터

베스천 호스트 스크리닝 라우터 보단 속도 느림


방화벽 시스템 방식
- 패킷 필터링 방식
> 디도스를 못막는다. 7계층 어픞리케이숀 방화벽은 막음

하이브리드 방화벽
> 혼용 방화벽

인바운드 - 내쪽으로 들어오는거
아웃바운드 - 나가는거

침입 탐지 시스템(IDS)
- 액숀을 안취한다. 경고만 해줌

침입 방지 시스템(IPS)
- 액숀을 취한다. 실제로 막아줌 비쌈 능동적인 시스템

요즘은 웹 방화벽도 있다. http를 타고오는 스크립트 분석

일반적인 방화벽 3~4계층

암호화 고등수학을 해야함 지가 박사때 들은거 자랑함 지가 수학 97점인데 포기함 지같은 천재도 못한다고 개념만 알라고함

암호화는 키와 알고리즘으로 구성, 원웨이 평션을 이용, 철수야 방정식 알제? 윤동아 옆에 누고 A+B=C인데 C는 A+B인걸 못알게함 이게 원웨이 뻥션임 DES  잠그는키와 푸는키가 같음
대칭형 암호화 - 잠그는 키와 여는 키가 같음 존나큰 단점이 키를 나눠써야함 키만 있으면 개나소나 염
비 대칭형 암호화 - 잠그는 키와 푸는 키가 다름 대표적 RSA, 퍼블릭키 알고리즘이라고도 함 내가 이걸 썻다 도장 딱 전자 서명

비밀키, 공개키 비슷 인증, 전자 서명 비슷

JAVA

import java.util.Scanner;
public class Www {
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  String str;
 
  while (true) {
   System.out.print("문자열을 입력하세요> ");
   str = sc.next();
  
   if (str.equals("quit"))
    break;
   if (str.matches("^www\\.(.+)")) // 정규식 www.으로 반드시 시작해야함 ^문자열의 시작  \\. \"하듯이 일반적인 .표현 (.+) 아무거나(.) 와야된다.
    System.out.println(str + " 은 'www'로 시작합니다.");
   else
    System.out.println(str + " 은 'www'로 시작하지 않습니다.");
  }
 }
}

JAVA 메소드

static method(정적메소드)  ==  객체생성없이 호출

Math.sqrt(9.0) == 3.0

Math.random() : [0, 1)

Integer.parseInt("123") == 123

Double.pareseDouble("3.14") == 3.14

JAVA 문자열

문자열은 기초 자료형이 아니다. 객체이다.
객체는 하프(힢)이라는 공간에 저장된다.
String s = new String("Hello World!"); // 선언과 동시에 초기화

s == 참조변수

String 클래스의 메소드

charAt(int index)  : char해당하는 위치의 문자를 반환
equals(Ovject anObject) : boolean 문자열이 같은지 비교한다
String s1 = new String("Hello");
String s2 = new String("Hello");
String s3 = "Hello";
String s4 = "Hello";

s3 == s4 // true 처음은 새로 만들어도 s4 얘는 s3의 Hello 그대로 가져옴
s1 == s2 // false 이유는 참조형 변수라서 주소값을 비교하기 때문. new연산자를 사용해서 둘다 새로운 객체이다.
s1.equals(s2) // true , 대소문자 구분한다. Hello와 hello 구분하면 안댐
s1.equalsIgnoreCase(s2) // Hello, hello를 넣어도 true이다. 대소문자 구분을 안 한다.
s1.concat(s2) // HelloHello 문자 두개를 붙인다 s1+s2와 같은 기능이다.
s1.isEmpty() // false 이 메소드는 length()가 0이면 true를 반환한다.
compareTo(Stirng anotherString) // 사전적 순서로 문자열을 비교한다. 앞에 있으면 -1, 같으면 0, 뒤에 있으면 1이 반환, 내가 작으면 음수 내가 크면 양수 사전적 순서라는 것은 사전에 누가 먼저 나오는지 라고 생각하면 편하다. "abcde"와 "abd"를 비교하면 "abd"가 더 크다.
s1 = Hello, s2 = World
s1.compareTo(s2) // s1 - s2 =-15, s2 - s1 = 15

/* String 객체 == 상수 문자열
 * 기존에 참조하던 객체를 바꾸는게 아니라 참조 주소가 변경된것이다.
 * String s1 = new String("Hello");
 * s1 = s1.toUpperCase();
 *
 * Hello 값이 어디 가는게 아니라 그대로 있고 s1은 참조하던 주소가 변경된것이다.
 * Hello == 쓰레기
 *   
 */
public class StringTest {
 public static void main(String[] args) {
  String proverb = "A barking dog";
  String s1, s2, s3, s4;
 
  System.out.println("문자열의 길이 ="+ proverb.length());
 
  s1 = proverb.concat(" never Bites!"); // 문자열 결합 + 연산자와 같음
  s2 = proverb.replace('b', 'B'); // 문자 교환
  s3 = proverb.substring(2, 5); // 인덱스 2이상 5미만
  s4 = proverb.toUpperCase(); // 대문자 변환
 
  System.out.println(s1);
  System.out.println(s2);
  System.out.println(s3);
  System.out.println(s4);
 }
}

JAVA 실습) 직사각형의 너비와 높이를 입력받아 넓이와 둘레길이 계산

import java.util.Scanner;
public class Test01 {
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  int w,h;
 
  System.out.print("가로, 세로 입력: ");
  w = sc.nextInt();
  h = sc.nextInt();
 
  System.out.printf("넓이 = %d\n둘레길이 = %d", w*h, (w+h)*2);
 }
}

import java.util.Scanner;
public class Test02 {
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  int w,h;
 
  System.out.print("가로, 세로 입력: ");
  w = sc.nextInt();
  h = sc.nextInt();
 
  System.out.printf("넓이 = %d\n둘레길이 = %d", area(w,h), length(w,h));
 }
 static int area(int w, int h) {
  return w*h;
 }
 static int length(int w, int h) {
  return (w+h)*2;
 }
}


import java.util.Scanner;
class Rectangle {
 private int w, h;

 public int area() {
  return w*h;
 }
 public int length() {
  return (w+h)*2;
 }
 public void setW(int x) {
  w = x;
 }
 public void setH(int x) {
  h = x;
 }
 public String toString() {
  return "Rectangle[너비:" + w + " 높이:" + h + "]" ;
 }

}
public class Test03 {
 public static void main(String[] args) {
  Scanner sc = new Scanner(System.in);
  Rectangle MyRt = new Rectangle();
  System.out.print("가로, 세로 입력: ");
  MyRt.setW(sc.nextInt());
  MyRt.setH(sc.nextInt());
 
  System.out.printf("넓이 = %d\n둘레길이 = %d\n", MyRt.area(), MyRt.length());
  System.out.println(MyRt);
 }
}

2017년 12월 1일 금요일

JAVA 실습) 반지름 입력받아 원의 넓이와 둘레 출력

3가지 방법이 있다.
1) 바로 main 안에서 구현

import java.util.Scanner;

public class MyMathTest {

public static void main(String[] args) {
int radius;
final double PI = 3.14;
double area, round;
Scanner sc = new Scanner(System.in);

System.out.print("반지름 입력: ");
radius = sc.nextInt();

area = radius * radius * PI;
round = 2 * PI * radius;

System.out.printf("원의 넓이=%.1f\n 원의 둘레길이=%.1f\n", area, round);

}

}

2) 절차지향프로그래밍 (C언어 스타일)
import java.util.Scanner;

public class MyMathTest {

public static void main(String[] args) {
int radius;
double area, round;
Scanner sc = new Scanner(System.in);
System.out.print("반지름 입력: ");
radius = sc.nextInt();
area = calArea(radius);
round = calRound(radius);
System.out.printf("원의 넓이=%.1f\n원의 둘레길이=%.1f\n", area, round);

}
static double calArea(int r) {
final double PI = 3.14;
return r*r*PI;
}
static double calRound(int r) {
final double PI = 3.14;
return 2*PI*r;
}

}

3) 객체지향프로그래밍

1. 추상화


상태(필드, 속성) : 반지름

동작 : 넓이, 둘레길이

2. UML

Cricle
---------------------------------
- radius : int
+ calArea() : double
+ calRound() : double
+ setRadius(int r) : void
+ toString() : String
---------------------------------

3. UML을 토대로 클래스 생성

public class Circle {
int radius;
static final double PI = 3.14;
public double calArea() { // 필드에 r이 있으니 매개변수가 따로 필요없다. 객체지향의 장점이다. 전달값을 줄일수가있따
return radius*radius*PI;
}
public double calRound() {
return 2*PI*radius;
}
public void setRadius(int r) {
radius = r;
}
public String toString() {
return "Circle[radius="+ radius+ "]";
}

}

4. 객체를 이용해 완성
import java.util.Scanner;

public class MyMathTest {

public static void main(String[] args) {
int radius;
double area, round;
Scanner sc = new Scanner(System.in);
Circle myCircle = new Circle();
System.out.print("반지름 입력: ");
radius = sc.nextInt();
myCircle.setRadius(radius);
area = myCircle.calArea();
round = myCircle.calRound();
System.out.printf("원의 넓이=%.1f\n원의 둘레길이=%.1f\n", area, round);
System.out.println(myCircle);

}

}

시스템 보안

1. 내컴퓨터는 해킹이 당한적 있는가? 있다. 2. 컴퓨터를 하게되면 해킹을 당한다. 무엇을 이용해 해킹을 하는가? 인터넷이 가장 보편적. 사회적인 공격(주변인이 사전정보를 가지고 해킹) 3. 대응을 어떻게 해야하나? 보안프로...