프로그래밍 381

컴퓨터가 2의 보수 표현을 사용하는 이유

# 컴퓨터의 연산장치가 사칙연산을 하는 법 - 덧셈 , 곱셈: 주어진 데이터 표현을 덧셈 or 시프트 연산 - 뺄셈, 나눗셈: 주어진 데이터 표현에 대한 보수(Complement)를 취하여 덧셈, 시프트 연산 컴퓨터는 데이터를 워드(Word)단위로 처리하는데, 운영체제에서 32bit, 64bit로 나누는 것을 보았을 것이다. 이는 바로 워드 사이즈를 가리킨다. 워드의 최상위 비트는 부호비트가된다. 부호비트가 0 = 양수, 1 = 음수다. 나머지 비트들은 데이터 값을 표현하는데 사용한다. 아래는 1워드가 8bit일때를 기준으로 십진수 -53을 비트로 나타낸 것이다. 최상위비트 최하위비트 부호비트 데이터 비트 1 0 1 1 0 1 0 1 # 왜 컴퓨터는 부호화-2의 보수표현을 사용할까? 1워드를 4bit로 ..

SSH 인증키 생성 및 간편 접속방법

# SSH Keygen으로 SSH 키 만들기 ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519__ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa__ -f 지정된 파일 위치/이름으로 키를 생성한다. -t 지정한 암호화 알고리즘을 통해 키를 생성한다. dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa 값이 간으하다. -b 생성할 키의 비트 수를 설정한다. 일반적으로 3072bit 정도면 충분하다. Passphrase란? ssh-keygen을 통해 키를 생성할때 passphrase를 묻는다. 비밀번호인데... 비밀키가 복사되어서 사용된다고 해도 passphrase를 입력하지 않으면 사용할 수 없으므로, 보안성을..

암호학에서 Salt란? 소금이 필요한 이유

# 솔트 (Salt) 해시 함수를 사용하여 단방향 암호화를 했을때, 언제나 같은 값을 같게 된다. 해커는 잘 알려진 해시값의 원문을 저장해두고 쉽게 원문을 유추할 수 있다. (이렇게 해시함수를 사용하여 만들어낼 수 있는 값들을 저장해둔 테이블을 레인보우 테이블이라고 한다.) 솔트는 이러한 꼼수를 피하기 위해 해시된 값에 추가적으로 들어가는 랜덤 데이터다. 비밀번호 "qwerty1234"를 SHA-256으로 해싱하면 아래와 같은 값이 나온다. 17F80754644D33AC685B0842A402229ADBB43FC9312F7BDF36BA24237A1F1FFB 이제 안전하겠지? 안타깝게도 Hash값을 RainbowTable에 넣어보면 순식간에 풀려버림 0ㅇ0 그래서 해시하기전에 임의의 랜덤 데이터 "LOU"를..

SSH 터널링 / 포트 포워딩 예시로 알아보기

# SSH란? 원격 호스트에 접속하기 위해 사용되는 보안 프로토콜. 일반적으로는 Public key / Private key를 사용하는 비대칭 암호화(Asymmetric Encryption) 방식을 사용한다. Public Key가 자물쇠, Private Key가 자물쇠를 여는 열쇠라고 비유를 해서 그려본 그림이다. 중간에 누군가 박스를 탈취한다 하더라도 자물쇠는 오직 A/B 두사람만이 열수 있기때문에 보안성이 확보된다. # SSH 터널링이란? (SSH 포트 포워딩) SSH 클라이언트와 서버사이 연결이 수립되어 만들어진 통로가 "터널" 여기에 포트 포워딩(Port Forwarding)을 이용하면 만들어진 터널을 다른 애플리케이션이 이용할 수 있다. 방화벽을 우회할 수도있으며, 암호화를 지원하지 않는 프로그..

[SSH] UNPROTECTED PRIVATE KEY FILE 해결방법

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0755 for 'navercloud_lou.pem' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. private key 파일의 퍼미션이 과도하게 설정되어 있어서 다른 유저가 건드릴 수 없도록 적절한 권한으로 낮추어주어야한다. 내..

Windows와 WSL 사용법 - 마운트 / 파일전송

WSL은 윈도우10이상에서 리눅스를 사용하기 위한 도구다. Windows에서 리눅스 계열 실행파일의 표준인 ELF binary 파일을 실행할 수 있게 해주는 호환성을 추가했다. * 자세한 설명은 이 링크가 도움이 될 것 같다. 명령 프롬프트 또는 Powershell에서 bash를 입력하면 WSL에 마운트 된다. WSL에서 /mnt/드라이브를 입력하면 원하는 드라이브를 마운트 시킬 수 있어 Windows 파일 접근이 가능하다. 파일 전송과 복사도 이걸 가지고 하면된다. $ cd /mnt/c/Users/ASUS/Downloads/ $ mv ./test.txt ~

내 소스 코드가 실행되기까지의 과정

# 컴파일 언어 컴파일(Compile)은 어떤 언어를 다른 언어로 바꾸어주는 과정이다. int a = 30과 같이 우리가 적는 코드는 사람이 이해하기 쉬운 고급언어(High-level language)라서 컴퓨터는 이를 이해하지 못한다. 컴퓨터는 고급언어로 작성된 코드를 컴파일러 또는 인터프리터를 통해서 저급언어(Low-level language)로 번역한 후에야 코드를 실행할 수 있다. 저급언어에는 기계어 (Machine language)와 어셈블리어 (Assembly language)가 있다. - 기계어 CPU가 명령을 처리할때 사용하는 언어, 2진수로 이루어져있다. 1000 1011 0100 0101 1111 1000 1000 0011 1100 0100 0000 1100 - 어셈블리어 기계어의 숫자..

파일 시스템 - FAT32 / NTFS / ZFS / HDFS

파일 시스템(Filesystem)은 파일들이 저장공간에 어떻게 이름 지어지고, 저장되고 가져와지는지에 대한 규약이다. 물리적인 공간에 저장된 데이터를 논리적으로 매핑하여 읽고, 데이터를 검색하고 저장하는 등 관리할 수 있게 한다. 대표적인 운영체제에서 사용하고 있는 파일 시스템의 종류는 다음과 같다. Windows FAT*, NTFS Linux Ext* Mac OS HFS, APFS Solaris ZFS 맥에서 diskutil info / 를 치면 현재 볼륨에 대한 파일 시스템 정보를 볼 수 있는데, APFS를 사용중임을 알 수 있다. 파일 메타데이터 파일 시스템을 추상화해보면 메타 영역과 데이터 영역으로 나누어 볼 수 있다. 메타 영역은 파일 관리를 위한 파일의 이름, 크기, 생성일, 위치 등의 정보가..