2020년 5월 15일 금요일

print와 for 문을 사용한 구구단 역순으로 출력하기

print와 for 문을 사용한 구구단 역순으로 출력

이제는 역순으로 구구단을 출력해보고자 하는데요.

역시 for 문을 사용하는데 range에서 1씩 감소하도록 코드를 수정했습니다.

a = 2

for b in range (9,1,-1):
    print (a," X ",b," = ",a*b)




이 소스코드를 이전과 같이 커맨드창에서

python test.py

하면 아래와 같이 출력이 됩니다. 즉, 구구단이 역순으로 출력하도록 하는 파이썬 프로그램입니다.




위의 for 문의 range에서 세번째 인자를 -1로 하면 9부터 시작해서 2까지 감소하면서 구구단이 출력되도록 합니다.

range에서 첫번째 인자는 시작점이고 두번째 인자는 그 이전까지만 카운트되도록 하는 인자입니다.

print와 for 문을 사용한 구구단 출력

이제는 실제 간단한 소스코드를 작성하여 파이썬을 실행해보고자 하는데요.

아래 소스코드를 작성했습니다.

a = 2

for b in range(2,10):
    print (a," X ",b," = ",a*b)


이 소스코드를 test.py라는 파일로 저장후 커맨드창에서

python test.py

하면 아래와 같이 출력이 됩니다. 즉, 구구단 일부를 출력하는 파이썬 프로그램입니다.


위의 for 문은 어는 범위만큼 반복적으로 실행되게 하는 파이썬 키워드입니다.

위의 예에서 b라는 변수의 값을 2부터 시작해서 1씩 증가시키는데 b가 10미만일때까지 반복적으로 아래 print 문이 실행됩니다.

이 예는 for 문 사용의 간단한 예제입니다.

GNSS (Global Navigation Satellite System)란?

GNSS (Global Navigation Satellite System)는 위치 및 타이밍 데이터를 GNSS 수신기로 전송할 신호를 제공하는 위성들 시스템을 말합니다. 그러면 수신기는 이 데이터를 사용하여 위치를 결정합니다. GNSS는 위성 범위 내비게이션을 자율적으로 제공하는 위성 내비게이션 시스템의 표준 용어입니다.

GNSS의 예로는 유럽의 갈릴레오 (Galileo), 미국의 NAVSTAR GPS (Global Positioning System), 러시아의 Global'naya Navigatsionnaya Sputnikovaya Sistema (GLONASS) 및 중국의 BeiDou Navigation Satellite System이 있습니다.

GNSS의 성능은 4가지 기준을 사용하여 평가됩니다.

• 정확도 (Accuracy) : 수신기의 측정 위치와 실제 위치, 속도 또는 시간의 차이
• 무결성 (Integrity) : 신뢰 임계 값을 제공하고 위치 데이터에 이상이 있는 경우 경보를 제공할 수있는 시스템의 능력
• 연속성 (Continuity) : 시스템이 중단없이 작동하는 능력
• 가용성 (Availability) : 신호가 위의 정확도, 무결성 및 연속성 기준을 충족하는 시간의 백분율

이 성능은 EGNOS (European Geostationary Navigation Overlay Service)와 같은 지역 위성 기반 Augmentation System (SBAS)으로 개선할 수 있습니다. EGNOS는 신호 측정 오류를 수정하고 신호 무결성에 대한 정보를 제공하여 GPS 정보의 정확성과 신뢰성을 향상시킵니다.

2017년 현재 주요 GNSS는 다음과 같습니다.

• GPS : 미국의 글로벌 포지셔닝 시스템입니다.
• GLONASS : 러시아의 글로벌 궤도 내비게이션 위성 시스템입니다.
• BeiDou-2 : 중국에서 개발 중인 시스템으로 현재 완전하게 작동하지 않습니다.
• Galileo : 현재 완전하게 작동하지 않으며, EU에서 개발중인 시스템입니다.

2020년 5월 14일 목요일

5G DSS (5G Dynamic Spectrum Sharing)

많은 사업자들은 5G의 Dynamic Spectrum Sharing이 4G 고객의 성능 저하없이 기존 인프라를 활용할 수 있는 매력적인 기술이라는 사실을 알고 있습니다. 3GPP Release 15의 일부으로서 사업자는 이미 사용중인 4G LTE 스펙트럼의 일부를 5G NR에 할당할 수 있습니다. 이는 4G LTE와 5G NR 사용자가 동시에 동일한 주파수 대역/채널에 공존할 수 있음을 의미합니다. 단순히 소프트웨어 업그레이드를 수행함으로써 기존 RAN (5G 가능)을 사용하여 5G 서비스를 제공할 수 있습니다.


DSS를 통해 네트워크 운영자는 동일한 스펙트럼내에서 4G와 5G를 모두 제공할 수 있으므로 두 기술간에 원활하게 전환할 수 있어 보다 비용 효율적입니다. DSS는 기존 4G 고객을 계속 지원하면서 점점 더 많은 고객이 기술을 채택함에 따라 사업자가 새로운 5G 사용자를 점진적으로 도입할 수 있는 효과적인 방법입니다. 과거에는 사업자가 새로운 기술로 업그레이드하고 싶을때 스펙트럼 재배치을 수행해야 했습니다. 즉, 기존 사용자를 스펙트럼의 일부로 옮기고 새로운 사용자를 위해 블록을 예약해야 했습니다.

DSS가 없으면 20MHz의 중간 대역 스펙트럼을 가진 사업자는 해당 스펙트럼을 2개로 분할해야 합니다. 다시 말해, 그들은 4MHz LTE에 10MHz 스펙트럼을 할당하고 모든 LTE 사용자를 10MHz 스펙트럼에 포함시켜야 합니다. 그러면 처음에는 최소 5G 사용자만 있을지라도 나머지 10MHz의 AWS 스펙트럼을 5G에 사용할 수 있습니다.

DSS를 사용하면 운영자는 중간 대역 스펙트럼을 분할하거나 4G LTE 또는 5G 전용 스펙트럼을 가질 필요가 없습니다. 대신, 두 기술간에 20MHz의 스펙트럼을 공유할 수 있습니다. 5G의 Dynamic Spectrum Sharing을 통해 운영자는 동일한 스펙트럼 블록에 4G와 5G를 모두 배치하고 수요에 따라 다양한 유형의 사용자에게 적절한 양을 동적으로 할당할 수 있습니다.

DSS의 유연성은 이동 통신 사업자를위한 실용적인 솔루션으로 인기를 끌고 있습니다.

파이썬의 기본 데이터 타입 - int, float, string, boolean

파이썬에서도 다른 프로그래밍 언어와 마찬가지로 여러가지 데이타 타입을 지원합니다.

가장 기본적인 타입은 정수형, 실수형, 문자열입니다.

정수형은 소수점이 없는 정수만을 지정할 수 있는 데이타 타입이며, 실수형은 소수점을 포함하는 실수를 지정할 수 있는 데이터 타입입니다.

아래 예를 보면

a라는 변수에 1이라는 데이타를 저장하기 위해서는

a=1

이라고 하면 되고 b라는 변수에 1.2라는 데이타를 저장하기 위해서는

b=1.2

이라고 하면 됩니다.

만약 b=1.0이라고 하면 어떻게 될까요?

정수 1과 실수 1.0은 실제 값은 같지만 파이썬 내부적으로는 다른 데이터 타입으로 됩니다.

만약 a+b의 결과는 어떻게 될까요?

파이썬에서는 c=a+b를 계산시키면 변수 c는 실수형으로 되고 값이 2.2로 나오게 됩니다.

문자열은 "" 사이에 있는 문자들을 말하며, d="Hello World"라고 하면 변수 d에 이 문자열이 저장됩니다.

아래는 이를 실제 파이썬으로 실행한 결과입니다.



그외 Boolean이라는 데이터 타입도 있는데 참이면 True, 거짓이면 False로 지정하면 됩니다.

a=True 또는 b=False

그러면

c=a or b 그리고 c=a and b는 결과가 어떻게 나올까요?

아래 실행결과를 보시면 됩니다.


여기서 참, 거짓은 대문자로 시작해야 하네요.

그외에 list, tuple, set, dict라는 데이터 타입이 있는데 좀더 공부해야겟네요.

2020년 5월 13일 수요일

파이썬 (Python) 설치

현재 개발자들이 사용하는 프로그래밍 언어들의 순위는 아래와 같은데요.

요즘 파이썬이 빅데이터 및 인공지능 분야에서 많이 사용하고 있어 대세입니다.


이에 따라 파이썬을 독학하고자 파이썬을 설치해보고자 하는데요.

아래 python.org를 접속하면 아래와 같이 메뉴가 나오는데, 이 메뉴들중 "Downloads"를 클릭하면


아래와 같이 화면이 나옵니다.

현재 버젼이 3.8.2이네요.


3.8.2 버젼을 다운로드하여 설치프로그램을 실행시키면 컴퓨터에 설치가 간단히 됩니다.

아래와 같이 설치 화면이 나올때 "Add Python 3.8 to PATH"를 체크해야만 어디서든 Python Interpretor를 실행시킬 수 있습니다.


설치 완료후 Command 창에서 "python"이라고 치면 아래와 같이 Python Interpretor가 실행됨을 볼 수 있습니다.

이전에 설치한 버젼이 있어 3.8.1로 나오네요.


양자 암호화 (Quantum Cryptography) (또는 양자 키 분배 (Quantum Key Distribution))란?

양자 암호화 ((Quantum Cryptography)는 양자 물리를 사용하여 대칭 암호화 키 (Symmetric Encryption Key)의 배포를 보호하는 기술입니다. 더 정확한 이름은 QKD (Quantum Key Distribution)입니다. 광 링크를 통해 빛의 "양자 입자"인 광자를 전송하여 작동합니다.

양자 물리학의 원리는 양자 상태의 관찰이 교란을 유발한다고 규정하고 있습니다. 다양한 QKD 프로토콜은 도청자가 전송된 광자를 관찰하려는 시도가 광자 전송을 교란하게 설계되었습니다.

이 교란은 전송 오류로 이어질 것이며 이를 합법적인 사용자가 감지할 수 있습니다. 이를 통해 분산 키의 보안을 확인하는데 사용됩니다.

QKD 구현에는 합법적인 사용자간의 상호 작용이 필요합니다. 이러한 상호 작용은 인증되어야 합니다. 이것은 다양한 암호화 수단을 통해 인증될 수 있습니다.

최종 결과는 QKD가 인증된 통신 채널을 활용하여 이를 안전한 통신 채널로 변환할 수 있다는 것입니다. 이론적으로 QKD는 OTP (One-Time Pad) 암호화와 결합하여 보안을 확보해야 합니다. 그러나 OTP에는 데이터를 암호화하는 하나의 키는 한번만 사용되도록 해야 합니다.

하지만 QKD의 주요 배포 속도가 일반적으로 기존 광통신보다 1,000배에서 10만배 낮기 때문에 가용 대역폭에 대한 강력한 제한이 있어도 문제가 되지 않습니다.

따라서 실제로 QKD는 종종 AES와 같은 기존의 대칭 암호화와 결합되어 짧은 암호화 키를 자주 새로 배포하는데 사용됩니다. 이것은 양자 안전 보안을 제공하기에 충분합니다.

현재 암호화 기술에 대한 사이버 보안 위험

우리의 사이버 보안 인프라에는 인증과 신뢰성의 두 가지 기능이 필요합니다. 인증을 통해 원격 사용자는 상대방을 신뢰하고 교환 내용을 검증할 수 있습니다.

주로 공개 키 서명 (Public Key Signature) 체계로 구현됩니다. 개인 정보를 교환하려면 신뢰성 (Confidentiality)이 필요합니다. 종종 2개 단계 프로세스로 수행됩니다. 먼저 사용자는 공통 비밀 키 (Common Secret Key)를 교환해야 합니다.

이것은 다른 공개 키 프로토콜 (Public-Key Protocol)인 키 교환 메커니즘 (Key Exchange Mechanism)에 의존합니다. 그런 다음 비밀 키는 대칭 키 암호화 체계 (Symmetric Key Encryption Scheme)에서 사용됩니다. 따라서 두 기능 모두 비대칭 또는 공개 키 암호화로 알려진 유사한 암호화 기술에 의존합니다.

사이버 보안은 기본 암호화 기술 그 이상입니다. 현재의 모든 보안 실패는 미약한 암호화가 아니라 잘못된 구현, 사회 공학 등에서 비롯됩니다. 오늘날 데이터를 인증하고 데이터 암호화 키를 안전하게 교환하는데 사용되는 RSA 또는 Elliptic Curve와 같은 알고리즘을 기반으로 하는 공개 키 암호화가 암호화 취약점입니다.

양자 컴퓨터의 처리 능력은 기존 컴퓨터보다 기하 급수적으로 이러한 수학적 문제를 해결하고 공개 키 암호화를 깨뜨릴 수 있습니다.

이는 현재 사용되는 공개 키 암호화 시스템이 장기적인 신뢰성을 요구하는 데이터를 보호하는데 적합하지 않음을 의미합니다. 공격자는 실제로 암호화된 데이터를 기록하고 공개 키를 공격하여 양자 컴퓨터가 해독할 수 있을 때까지 기다릴 수 있습니다.

양자 안전 암호화가 필요한 이유

가장 큰 위협은 디지털 서명 및 키 교환에 사용되는 공개 암호화 또는 비대칭 알고리즘입니다. 범용 양자 컴퓨터를 사용할 수 있게 되면 RSA 및 Elliptic Curve 알고리즘을 파괴할 수 있는 유명한 Shor 알고리즘과 같은 양자 알고리즘이 이미 있습니다.

또 다른 유명한 양자 알고리즘인 Grover 알고리즘은 대칭 암호화를 공격합니다. 다행히도 키 크기의 간단한 확장으로 Grover를 대응할 수 있습니다. 예를 들어 256 비트 키를 사용하는 AES 대칭 암호화 체계는 안전한 것으로 간주됩니다.

양자 컴퓨터 위협에 대응하기 위해서는 두 가지 대안이 필요합니다. 하나는 양자 컴퓨터에 저항해야 하는 새로운 고전 알고리즘의 개발입니다. 이를 Post-Quantum 또는 Quantum-Resistant 알고리즘이라고 합니다.

우리는 이미 암호화를 위해 위의 AES 사례를 보았습니다. 또한 해시 함수를 기반으로하는 일부 서명 체계 (LMS 및 XMSS)를 언급할 수 있으며, NIST 프로세스의 프레임 워크에서 서명 및 키 교환을 위한 많은 다른 알고리즘이 개발되고 있습니다. 그들의 특성과 양자 저항은 여전히 ​​테스트 중입니다. 표준화는 2023-2024 년에 예상됩니다.

오늘날 사용 가능한 두 번째 대안은 매우 다른 원리를 따르는 양자 안전 키 교환을 제공하는 QKD (Quantum Key Distribution)입니다.

대부분의 QKD 솔루션은 링크 암호화기가 있는 키 분배장치로 구성됩니다. QKD 장치는 비밀 키를 링크 암호화기에 전달합니다. 링크 암호화기는 일반적으로 최대 100Gb/s의 대용량 데이터를 암호화하기 위해 이 키를 사용합니다.

이 솔루션은 광섬유의 품질에 따라 약 80km의 범위에 해당하는 18dB의 광섬유에서 광학 감쇠까지 작동합니다.

따라서 이러한 시스템은 일반적으로 회사 캠퍼스 또는 데이터 센터 상호 연결과 같은 LAN (Local Area Network) 또는 수도권 네트워크에 설치됩니다.

이러한 응용은 소위 Trusted Node를 사용하여 훨씬 더 먼 거리로 확장되었습니다. 이러한 Trusted Node는 키 호핑을 수행하여 키가 시작 노드에서 생성되어 종단 노드까지 노드에서 노드로 안전하게 전송됩니다.

전체 전송 채널의 보안에 의존하는 대신 각 노드에서만 보안을 제공해야 합니다. 유사한 기술을 사용하여 링 네트워크 (Ring Network) 및 스타 네트워크 (Star Network)와 같은 다양한 유형의 QKD 네트워크를 구축할 수도 있습니다.

이를 위해서는 네트워크의 모든 노드와 키를 분배하기 위한 보다 복잡한 키 관리 체계가 필요하며, 글로벌 사용을 위해 Free-Space QKD를 사용하여 Trusted Node를 위성으로 구현할 수 있습니다.

현재 암호화기는 최대 10Gbps의 링크 대역폭으로 이더넷 및 파이버 채널과 호환됩니다. 또한 표준 QKD 인터페이스는 ETSI (European Telecommunication Standards Institute)에서 개발되었습니다.