ARP의 취약점을 이용한 공격 기법이다.
자신의 물리적 주소(MAC)를 공격 대상의 것으로 변조하여 데이터 패킷을 가로채거나 방해하는 기법이다.
AAA는 다음 3가지 기능을 기반으로 사용자의 컴퓨터 자원 접근 처리와 서비스 제공에 있어서의 다음 3가지 기능을 제공하는 서버이다.
인증 (Authentication)
접근하는 사용자의 신원을 검증하는 기능
인가 (Authorization)
신원이 검증된 사용자에게 특정된 권한과 서비스를 허용하는 기능
과금 (Accounting)
사용자가 어떤 종류의 서비스를 이용했고, 얼마만큼의 자원을 사용했는지 기록 및 보관하는 기능
생성 패턴
추상 팩토리(Abstract Factory)
구체적인 클래스에 의존하지 않고, 인터페이스를 통해 서로 연관·의존하는 객체들의 그룹으로 생성하여 추상적으로 표현하는 패턴이다.
빌더 패턴 (Builder)
작게 분리된 인스턴스를 건축 하듯이 조합하여 객체를 생성하는 패턴이다.
팩토리 메소드 (Factory Method)
객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화한 패턴이다. 가상 생성자 패턴이라고도 한다.
프로토타입 (Prototype)
원본 객체를 복제하는 방법으로 객체를 생성하는 패턴이다.
싱글톤 (Singleton)
하나의 객체를 생성하면 생성된 객체를 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수는 없는 패턴이다.
구조 패턴
브리지 (Bridge)
구현부에서 추상층을 분리하여 서로가 독립적으로 확장할 수 있도록 구성하는 패턴이다.
컴포지트 (Composite)
객체들을 트리 구조로 구성하여 디렉토리 안에 디렉토리가 있듯이 복합 객체 안에 복합 객체가 포함되는 구조를 구현할 수 있는 패턴이다.
데코레이터 (Decorator)
객체간의 결합을 통해 능동적으로 기능들을 확장할 수 있는 패턴이다. 임의의 객체에 부가적인 기능을 추가하기 위해 다른 객체들을 덧붙이는 방식으로 구현한다.
프록시 (Proxy)
복잡한 시스템을 개발하기 쉽도록 클래스나 객체들을 조합하는 패턴으로, 대리자라고도 불린다.
내부에서는 객체 간의 복잡한 관계를 단순하게 정리해주고, 외부에서는 객체의 세부적인 내용을 숨겨주는 역할을 수행한다.
행위 패턴
중재자 (Mediater)
수많은 객체들 간의 복잡한 상호작용(Interface)을 캡슐화하여 객체로 정의하는 패턴이다.
옵서버 (Observer)
한 객체의 상태가 변화하면 객체에 상속되어 있는 다른 객체들에게 변화된 상태를 전달하는 패턴이다.
방문자 (Visitor)
각 클래스들의 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성하는 패턴이다.
자료 결합도 (Data Coupling) - 결합도↓
모듈 간의 인터페이스가 자료 요소로만 구성될 때의 결합도이다.
스탬프 결합도 (Stamp Coupling)
모듈간의 인터페이스가 자료 구조로 전달될 때의 결합도이다.
제어 결합도 (Control Coupling)
단순 처리 대상인 데이터만 전달되는 것이 아니라 어떻게 처리해야하는지를 결정하는 제어요소가 전달되는 경우의 결합도이다.
외부 결합도 (External Coupling)
어떤 모듈에서 선언한 데이터(변수)를 외부의 다른 모듈에서 참조할 때의 결합도이다.
공유 결합도 (Common Coupling)
공유되는 공통 데이터 영역을 여러 모듈이 사용할 때의 결합도이다. 파라미터가 아닌 모듈 밖에서 선언된 전역 변수를 사용하여 전역 변수를 갱신하는 방식으로 상호작용하는 때의 결합도이다.
내용 결합도 (Content Coupling) - 결합도↑
한 모듈이 다른 모듈의 내부 기능 및 그 내부 자료를 직접 참조하거나 수정할 때의 결합도이다.
상향식 통합 테스트 (상향식 테스트 x)
프로그램의 하위 모듈에서 상위 모듈 방향으로 통합하면서 테스트 하는 기법이다.
상향식 통합 테스트 절차
하위 모듈들을 클러스터로 결합한다.
상위 모듈에서 데이터의 입·출력을 확인하기 위해 더미 모듈인 드라이버(Driver)를 작성한다.
통합된 클러스터 단위로 테스트한다.
테스트가 완료되면 클러터는 프로그램의 상위로 이동하여 결합하고 드라이버는 실제 모듈로 대체된다.
하향식 통합 테스트 (하향식 테스트 x)
프로그램의 상위 모듈에서 하위 모듈 방향으로 통합하면서 테스트하는 기법이다.
하향식 통합 테스트 절차
주요 제어 모듈은 작성된 프로그램을 사용하고, 주요 제어 모듈의 종속 모듈들은 스텁(Stub)으로 대체한다.
깊이 우선 또는 넓이 우선 등의 통합 방식에 따라 하위 모듈인 스텁들이 한 번에 하나씩 실제 모듈로 교체된다.
모듈이 통합될 때마다 테스트를 실시한다.
새로운 오류가 발생하지 않음을 보증하기 위해 회귀 테스트를 실시한다.
인덱스(Index, 색인)는 데이터 레코드를 빠르게 접근하기 위해 <키 값, 포인터> 쌍으로 구성되는 데이터 구조이다.
인덱스는 레코드가 저장된 물리적 구조에 접근하는 방법을 제공하고, 파일의 레코드에 빠르게 액세스 할 수 있다.
출처 : https://hellocbt.com/index.php?mid=exam33&exam_srl=93553
테스트 조건, 테스트 데이터, 예상 결과
구조 다이어그램과 행위 다이어그램으로 분류된다.
구조 다이어그램 (6개)
클래스 다이어그램 (Object Diagram)
클래스와 클래스가 가지는 속성, 클래스 사이의 관계를 표현한다.
출처 : https://velog.io/@superscman/UML-%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8
객체 다이어그램 (Object Diagram)
클래스 다이어그램의 특정 시점에 대한 인스턴스를 나타낸다. 클래스에 속한 사물(객체)들, 즉 인스턴스(Instance)를 특정 시점의 객체와 객체 사이의 관계로 표현한다.
출처 : https://velog.io/@superscman/UML-%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8
컴포넌트 다이어그램 (Component Diagram)
실제 구현 모듈인 컴포넌트 간의 관계나 컴포넌트 간의 인터페이스를 표현한다.
출처 : https://velog.io/@superscman/UML-%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8
배치 다이어그램 (Deployment Diagram)
결과물, 프로세스, 컴포넌트 등 물리적 요소들의 위치를 표현한다.
출처 : https://velog.io/@superscman/UML-%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8
출처 : https://velog.io/@superscman/UML-%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8
행위 다이어그램 (7개)
유스케이스 다이어그램 (Use Case Diagram)
사용자의 요구를 분석하는 것으로, 기능 모델링 작업에 사용한다. 사용자(Actor)와 사용 사례(Use Case)로 구성된다.
순차 다이어그램 (Sequence Diagram)
상호작용하는 시스템이나 객체들이 주고받는 메시지를 표현한다.
커뮤니케이션 다이어그램 (Communication Diagram)
동작에 참여하는 객체들이 주고받는 메시지와 객체들간의 연관 관계를 표현한다.
상태 다이어그램 (State Diagram)
하나의 객체가 자신이 속한 클래스의 상태 변화 혹은 다른 객체와의 상호작용에 따라 상태가 어떻게 변화하는지를 표현한다.
활동 다이어그램 (Activity Diagram)
시스템이 어떤 기능을 수행하는지 객체의 처리 로직이나 조건에 따른 처리의 흐름을 순서에 따라 표현한다.
상호작용 개요 다이어그램 (Interaction Overview Diagram)
상호작용 다이어그램 간의 제어 흐름을 표현한다.
출처 : https://velog.io/@superscman/UML-%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8
타이밍 다이어그램 (Timing Diagram)
객체 상태 변화와 시간 제약을 명시적으로 표현한다.
출처 : https://velog.io/@superscman/UML-%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8
OSI 7 계층은 다른 시스템 간의 원할한 통신을 위해 ISO(국제 표준화기구)에서 제안한 통신 규약(protocol)이다.
물리 계층 (Physical Layer)
전송에 필요한 두 장치 간의 실제 접속과 절단 등 기계적, 전기적, 기능적, 절차적 특성에 대한 규칙을 정의한다.
데이터 링크 계층 (Data Link Layer)
물리적으로 연결된 두 개의 인접한 개방 시스템들 간에 신뢰성 있고 효율적인 정보 전송을 할 수 있도록 연결 설정, 데이터 전송, 오류 제어 등의 기능을 수행한다.
네트워크 계층 (Network Layer)
개방 시스템들 간의 네트워크 연결을 관리하는 기능과 데이터의 교환 및 중계 기능을 한다.
전송 계층 (Transport Layer)
논리적 안정과 균일한 데이터 전송 서비스를 제공함으로써 종단 시스템(ENd-to-End)간에 투명한 데이터 전송을 가능하게 한다.
세션 계층 (Session Layer)
송·수신 측 간의 관련성을 유지하고 대화 제어를 담당한다.
표현 계층 (Presentation Layer)
서로 다른 데이터 표현 형태를 갖는 시스템 간의 상호 접속을 위해 필요한 계층으로, 코드 변환, 데이터 암호화, 데이터 압축, 구문 검색 등의 기능을 수행한다.
응용 계층 (Application Layer)
사용자(응용 프로그램)가 OSI 환경에 접근할 수 있도록 서비스를 제공한다.
동일한 키로 데이터를 암호화하고 복호화 하는 암호화 기법이다.
스트림 암호화 방식
평문과 동일한 길이의 스트림을 생성하여 비트 단위로 암호화 하는 방식이다.
ex. LFSR, RC4, TKIP
TKIP (Temporal Key Integrity Protocol)
기존의 무선 랜 보안 프로토콜인 WEP의 취약성을 보완한 데이터 보안 프로토콜로, 임시 키 무결성 프로토콜이라고도 한다.
암호 알고리즘의 입력 키 길이를 128비트로 늘리고 패킷당 키 할당, 키값 재설정 등의 키 관리 방식을 개선했다.
블록 암호화 방식
한 번에 하나의 데이터 블록을 암호화 하는 방식이다.
ex. DES, SEED, AES, ARIA, IDEA, Skipjack
DES (Data Encryption Standard)
NBS에서 발표한 개인키 암호화 알고리즘이며, 후에는 해독이 쉬워지면서 AES로 대체되었다.
블록 크기: 64비트, 키 길이: 56비트
SEED
KISA(한국인터넷진흥원)에서 개발한 블록 암호화 알고리즘이다.
블록 크기: 128비트, 키 길이: 128 or 256
AES (Advanced Eccryption Standard)
DES의 한계를 느낀 미국 표준 기술 연구소(NIST)에서 발표한 개인키 암호화 알고리즘이다.
블록 크기: 128비트, 키 길이: 128 or 192 or 256
IDEA(International Data Encryption Algorithm)
스위스의 라이와 메시가 1990년에 개발한 PES를 개선한 알고리즘이다.
블록 크기: 64비트, 키 길이: 128비트
Skipjack
NSA(국가 안전 보장국)에서 개발한 암호화 알고리즘이다.
클리퍼 칩이라는 IC 칩에 내장되어 있다.
블록 크기: 64비트, 키 길이: 80비트
공개키 암호화 방식
RSA
XOR 연산은 두 값이 서로 다르면 참을 반환한다.
출처 : https://devtry.tistory.com/entry/%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90AND-OR-XOR-NOT
블랙 박스 테스트 기법
동치 분할 검사 (Equivalence Partitioning Testing)
프로그램의 입력 조건에 타당한 입력 자료와 타당하지 않은 입력 자료의 개수를 균등하게 하여 테스트 케이스를 정하고, 해당 입력 자료에 맞는 결과가 출력되는지 확인하는 기법이다.
경계값 분석 (Boundary Value Analysis)
입력 조건의 중간값보다 경계값에서 오류가 발생될 확률이 높다는 점을 이용하여 입력 조건의 경계값을 테스트 케이스로 선정하여 검사하는 기법이다.
원인-효과 그래프 검사 (Cause-Effect Graphing Testing)
입력 데이터 간의 관계와 출력에 영향을 미치는 상황을 체계적으로 분석한 다음 효용성이 높은 테스트 케이스를 선정하여 검사하는 기법이다.
오류 예측 검사 (Error Guessing)
과거의 경험이나 확인자의 감각으로 테스트 하는 기법이다.
비교 검사 (Comparison Testing)
여러 버전의 프로그램에 동일한 테스트 자료를 제공하여 동일한 결과가 출력되는지 테스트하는 기법이다.
화이트 박스 테스트 기법
기초 경로 검사 (Base Path Testing)
테스트 케이스 설계자가 절차적 설계의 논리적 복잡성을 측정할 수 있게 해주는 테스트 기법이다.
제어 구조 검사 (Control Structure Testing)
조건 검사 (Condition Testing)
프로그램 모듈 내에 있는 논리적 조건을 테스트하는 테스트 케이스 설계 기법이다.
루프 검사 (Loop Testing)
프로그램의 반복(Loop)구조에 초점을 맞춰 실시하는 테스트 케이스 설계 기법이다.
데이터 흐름 검사 (Data Flow Testing)
프로그램에서 변수의 정의와 변수 사용의 위치에 초점을 맞춰 실시하는 테스트 케이스 기법이다.
화이트 박스 테스트 검증 기준
- 문장 검증 기준 (Statement Coverage)
소스 코드의 모든 구문이 한 번 이상 수행되도록 테스트 케이스를 설계한다.
- 분기 검증 기준 (Branch Coverage)
소스 코드의 모든 조건문에 대해 조건식의 결과가 TRUE인 경우와 FALSE인 경우가 한 번 이상 수행되도록 테스트 케이스를 설계한다.
- 조건 검증 기준 (Condition Coverage)
소스 코드의 조건문에 포함된 개별 조건식의 결과가 TRUE인 경우와 FALSE인 경우가 한 번 이상 수행되도록 테스트 케이스를 설계한다.
cf.
출처 : https://itproda.tistory.com/101
집합 관계 (Aggregation)
하나의 사물이 다른 사물에 포함되어 있는 관계로, 전체와 부분으로 구분되어지며 서로 독립적인 관계이다.
일반화 관계 (Generalization)
상위 모듈이 하위 모듈보다 더 일반적인 개념을 가지고 있으며, 하위 모듈이 상위 모듈보다 더 구체적인 개념을 가지는 관계이다.
연관 관계 (Association)
사물들이 서로 연관되었음을 나타내는 개념이다. 보통 한 사물이 다른 사물에게 제공 받은 기능을 지속적으로 사용하는 경우에 나타난다.
의존 관계 (Dependency)
연관 관계와 같이 사물 사이에 서로 연관은 있으나 필요에 의해 서로에게 영향을 주는 짧은 시간 동안만 연관을 유지하는 관계이다.
실체화 관계 (realization)
책임들의 집합인 인터페이스와 이 책임들을 실제로 실현한 사물(클래스)들 간의 관계이다.