Circle 。。。/융보공(融保工) 7기

[2024.05.03] 융보공 6주차 활동 내용 정리 💗

z3r0_ 2024. 5. 10. 12:25

C언어

 

배열

- 배열 이름은 할당된 메모리 공간의 시작 주소

- 배열을 인수로 전달할 때, ‘배열 이름’만 전달

- 매개변수는 일반 배열처럼 선언하지만, 이때 크기는 무시됨 ➡️ 필요시에 배열 길이를 별도의 인수로 전달해야 함

 

- 배열을 인수로 전달받은 함수에서 배열 원소의 값을 변경하면 원본 배열의 원소 값이 바뀜

 

2차원 배열

- 배열 원소가 1차원 배열인 배열

 

- 초기화 방법에 따라 값 생략의 효과가 달라짐

포인터

- 데이터를 저장하기 위해 할당된 메모리 공간의 주소를 나타냄

* 포인터 상수 : 메모리 주소 값

* 포인터 변수 : 주소 값을 저장할 수 있는 변수

 

자료형 *포인터변수;

 

- 주소연산을 취한 결과에 간접참조연산을 취하면 원래 변수와 같음

인수전달

call by value (인수를 값으로 전달)

- 함수가 호출되면 인자 값을 스택에 복사

- 값을 복사하기 때문에 함수에서 인자 값을 바꾸더라도 main() 함수는 영향을 받지 않으므로 두 함수는 독립적이고 안전함

 

call by reference (인수를 주소로 전달)

- 전달하려는 변수의 주소를 함수에 전달 → 변수 자체 전달

- 주소 연산자(&)를 이용해 변수의 주소 값을 함수에 넘겨주고, 간접 연산자(*)를 이용해 주소 값이 가리키는 값을 읽거나 저장

 

- 배열 첨자연산 = 포인터 연산 

블록암호

- 고정된 크기의 블록으로 데이터를 처리하는 대칭 키 암호화 기술

* 불록: 고정된 크기의 데이터 조각으로 주로 64비트 또는 128 비트의 크기를 갖는다

* 대칭키: 암호화와 복호화에 동일한 키를 사용하는 암호화 기법

 

블록암호 운영 모드

ECB 모드 등

- 평문 블록을 암호화 한 것이 그대로 암호문 블록이 되는 것을 의미함

 

GOOD

- 암호화와 복호화가 병렬적으로 가능하다.

- 일부 블록만 독립적으로 암호화가 가능하다.

- 블록 오류가 다른 블록에게 영향을 주지 않는다.

 

BAD

- 공격에 취약하다.

 

비밀번호 정책

최소 길이 정책: 비밀번호의 최소 길이를 지정하여 무작위 대입 공격을 어렵게 함
문자 종류 정책: 숫자, 영문자, 특수문자 등 다양한 문자 종류 사용을 요구하여 복잡성을 높임
사전어 금지 정책: 사전에 있는 단어나 일반적인 패턴의 비밀번호 사용을 제한
주기적 변경 정책: 일정 기간마다 비밀번호를 변경하도록 하여 노출 위험을 낮춤
관리자는 절대 사용자의 실제 비밀번호를 볼 수 없음. (해시값만 저장되어 있음)
 

비밀번호 원리

사용자가 입력한 비밀번호는 일방향 해시 함수(예: SHA-256, bcrypt 등) 거쳐 해시값으로 변환
     * 동일한 입력에 대해서는 항상 같은 해시값이 출력
     * 해시값만으로는 원래 비밀번호를 복구할 수 없음. (일방향성)
     * 서버 측에는 비밀번호의 해시값만 저장되어 있음
로그인 시 입력한 비밀번호는 동일한 해시 함수를 통해 해시값으로 변환
서버에 저장된 해시값과 입력 비밀번호의 해시값을 비교하여 일치 여부를 판단
 

패스워드 저장 코드 실습 

SHA-1 알고리즘을 이용한 패스워드 함수 예제
MySql에서 패스워드를 저장하기 위해 쓰는 방법
SHA-1 함수 2번 호출하고 생성된 해시값을 16진수 문자열로 만듦
 

➡️ 동일 문자에는 동일 해시값 출력, 해시값이 일치하는지 확인하여 비밀번호 확인 가능

 

 

블록 암호를 사용한 암복호화

블록 암호는 고정된 크기의 블록 단위로 데이터를 암/복호화하는 함수
암호화와 복호화할 때 동일한 키를 사용하는 대칭키 암호화
AESSEED가 대표적
 

AES 사용한 암복호화

ECB 운영 모드와 PKCS5Padding을 사용하고, 키 생성기로 비밀키를 만듦
암호화를 위한 Cipher 인스턴스를 생성하기 위해서 getInstance( ) 메소드를 호출한 -> init() 메소드로 암호화 모드와 비밀키를 설정-> doFinal() 메소드로  데이터를 암호화
복호화도 동일한 과정을 거침 단, init( ) 메소드를 통해 복호화 모드라는 것을 설정
 

SEED 암호

SEED는 한국정보보호진흥원에서 개발한 128비트 블록 암호 알고리즘
국가정보원 검증을 거쳐 안전성이 확인된 대표적인 국내 암호 알고리즘
16라운드의 후적 구조로 되어 있으며, 키 스케줄을 통해 라운드 키를 생성
DES나 AES 등 다른 블록 암호와 마찬가지로 ECB, CBC, CFB, OFB 등의 모드를 지원
 

자바 문법

- 자바 문법을 공부하는 사이트로 w3school을 추천해 주셨다!

파이썬 수업에서 들은 적이 있는데, 파이썬 외에도 자바, HTML 등 다양한 언어에 대한 커리큘럼을 제공하는 듯 하다.

https://www.w3schools.com/java/default.asp

 

Java Tutorial

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com