版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2025年P(guān)ython邊緣計(jì)算安全專項(xiàng)訓(xùn)練試卷:邊緣安全防護(hù)與數(shù)據(jù)加密模擬實(shí)戰(zhàn)考試時(shí)間:______分鐘總分:______分姓名:______一、請(qǐng)編寫一個(gè)Python函數(shù)`generate_rsa_keys(private_key_path,public_key_path,key_size=2048)`,用于生成一對(duì)RSA密鑰(私鑰和公鑰)。私鑰保存至`private_key_path`路徑,公鑰保存至`public_key_path`路徑。要求使用`cryptography`庫的相關(guān)模塊和類完成。二、假設(shè)你正在為一個(gè)邊緣設(shè)備編寫安全通信模塊。該設(shè)備需要使用公鑰加密(非對(duì)稱加密)來保護(hù)其發(fā)送到云端的數(shù)據(jù)的機(jī)密性。接收方(云端)已經(jīng)提供了一個(gè)RSA公鑰(存儲(chǔ)在`remote_public_key.pem`文件中)。請(qǐng)編寫一個(gè)Python函數(shù)`encrypt_data_with_rsa_public_key(data,public_key_file_path)`,該函數(shù)讀取指定路徑的公鑰文件,使用此公鑰對(duì)傳入的`data`字符串進(jìn)行加密,并將加密后的字節(jié)串返回。為簡(jiǎn)化,假設(shè)數(shù)據(jù)長(zhǎng)度適合單次加密。三、邊緣節(jié)點(diǎn)上運(yùn)行著一個(gè)服務(wù),該服務(wù)需要根據(jù)客戶端的IP地址和請(qǐng)求的API路徑來決定是否允許訪問。請(qǐng)編寫一個(gè)Python函數(shù)`check_access(ip_address,api_path)`,該函數(shù)實(shí)現(xiàn)一個(gè)簡(jiǎn)單的訪問控制邏輯:僅當(dāng)`ip_address`為`192.168.1.x`網(wǎng)段內(nèi)的地址,并且`api_path`以`/safe`開頭時(shí),才返回`True`(允許訪問),否則返回`False`(拒絕訪問)。可以使用Python標(biāo)準(zhǔn)庫中的`ipaddress`模塊來處理IP地址。四、在一個(gè)邊緣計(jì)算場(chǎng)景中,多個(gè)傳感器節(jié)點(diǎn)定期向中心節(jié)點(diǎn)發(fā)送溫度數(shù)據(jù)。為確保數(shù)據(jù)的完整性,中心節(jié)點(diǎn)需要驗(yàn)證接收到的數(shù)據(jù)未被篡改。數(shù)據(jù)發(fā)送前,傳感器使用HMAC-SHA256算法對(duì)數(shù)據(jù)進(jìn)行簽名,并將簽名隨數(shù)據(jù)一起發(fā)送。中心節(jié)點(diǎn)持有每個(gè)傳感器的預(yù)共享密鑰。請(qǐng)編寫一個(gè)Python函數(shù)`verify_sensor_data(data,signature,sensor_id,secret_key)`,該函數(shù)使用給定的`secret_key`和`sensor_id`(假設(shè)`sensor_id`與密鑰直接關(guān)聯(lián),例如`secret_key='key_'+sensor_id`),計(jì)算數(shù)據(jù)`data`的HMAC-SHA256簽名,并將其與接收到的`signature`進(jìn)行比對(duì)。如果一致,返回`True`,表示數(shù)據(jù)完整性驗(yàn)證通過;否則返回`False`。要求使用`hmac`和`hashlib`庫。五、某邊緣設(shè)備需要定期與云端進(jìn)行安全通信,交換加密的配置文件。通信使用TLS協(xié)議。請(qǐng)編寫一個(gè)Python函數(shù)`establish_tls_connection(server_address,server_port,cert_file_path,key_file_path,ca_cert_file_path)`,該函數(shù)嘗試使用`socket`庫建立一個(gè)安全的TLS連接到指定的`server_address`和`server_port`。該函數(shù)需要加載客戶端證書`cert_file_path`和私鑰`key_file_path`,并指定CA證書`ca_cert_file_path`以驗(yàn)證服務(wù)器身份。函數(shù)成功建立連接后應(yīng)返回連接的`socket`對(duì)象,如果連接或握手失敗,則返回`None`。請(qǐng)確保代碼處理了必要的異常。六、邊緣設(shè)備上存儲(chǔ)著一些敏感的用戶配置信息,需要定期進(jìn)行安全審計(jì)。請(qǐng)編寫一個(gè)Python腳本`audit_sensitive_config.py`,該腳本的功能如下:1)從當(dāng)前目錄下讀取一個(gè)名為`sensitive_config.yaml`的YAML文件(假設(shè)內(nèi)容為純文本或簡(jiǎn)單結(jié)構(gòu),無需復(fù)雜解析);2)對(duì)讀取到的文件內(nèi)容使用AES對(duì)稱加密(使用一個(gè)固定的、較簡(jiǎn)單的密鑰,如`'mysecretpassword'`)進(jìn)行加密;3)將加密后的內(nèi)容保存到一個(gè)名為`encrypted_config.bin`的文件中。腳本應(yīng)處理文件讀取、寫入失敗以及加密過程中可能出現(xiàn)的異常,并在最后輸出“審計(jì)完成”信息。試卷答案一、```pythonfromcryptography.hazmat.primitives.asymmetricimportrsafromcryptography.hazmat.primitivesimportserializationdefgenerate_rsa_keys(private_key_path,public_key_path,key_size=2048):#生成RSA私鑰private_key=rsa.generate_private_key(public_exponent=65537,key_size=key_size,)#生成RSA公鑰public_key=private_key.public_key()#將私鑰保存到文件withopen(private_key_path,"wb")asf:f.write(private_key.private_bytes(encoding=serialization.Encoding.PEM,format=serialization.PrivateFormat.PKCS8,encryption_algorithm=serialization.NoEncryption()))#將公鑰保存到文件withopen(public_key_path,"wb")asf:f.write(public_key.public_bytes(encoding=serialization.Encoding.PEM,format=serialization.PublicFormat.SubjectPublicKeyInfo,encryption_algorithm=serialization.NoEncryption()))```解析思路:使用`cryptography`庫的`rsa`模塊生成RSA密鑰對(duì)。首先調(diào)用`rsa.generate_private_key`生成私鑰,指定公鑰指數(shù)(通常為65537)和密鑰長(zhǎng)度(默認(rèn)2048位)。然后通過私鑰的`public_key()`方法獲取對(duì)應(yīng)的公鑰。最后,使用`private_bytes`和`public_bytes`方法將私鑰和公鑰按照PEM格式序列化并保存到指定的文件路徑。`serialization.NoEncryption()`表示不使用加密,直接導(dǎo)出密鑰。二、```pythonfromcryptography.hazmat.primitives.asymmetricimportpaddingfromcryptography.hazmat.primitivesimporthashesfromcryptography.hazmat.primitives.serializationimportload_pem_public_keyimportosdefencrypt_data_with_rsa_public_key(data,public_key_file_path):#讀取公鑰文件withopen(public_key_file_path,"rb")asf:public_key=load_pem_public_key(f.read())#對(duì)數(shù)據(jù)進(jìn)行加密#使用OAEP填充方案,推薦用于RSA加密encrypted_data=public_key.encrypt(data.encode(),padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),algorithm=hashes.SHA256(),label=None))returnencrypted_data```解析思路:首先使用`load_pem_public_key`函數(shù)從文件中加載RSA公鑰。然后調(diào)用公鑰的`encrypt`方法對(duì)數(shù)據(jù)進(jìn)行加密。數(shù)據(jù)需要先轉(zhuǎn)換為字節(jié)串。加密方法使用`padding.OAEP`(OptimalAsymmetricEncryptionPadding),這是推薦的非對(duì)稱加密填充方案,它結(jié)合了MD5和SHA-256哈希算法,并允許設(shè)置標(biāo)簽(`label`)。`data.encode()`將輸入的字符串?dāng)?shù)據(jù)編碼為字節(jié)串。三、```pythonimportipaddressdefcheck_access(ip_address,api_path):#將字符串IP地址轉(zhuǎn)換為IPv4地址對(duì)象try:ip=ipaddress.ip_address(ip_address)exceptValueError:#如果IP地址格式不正確,直接拒絕訪問returnFalse#檢查IP是否在/24網(wǎng)段內(nèi)ifnotipaddress.ip_network('/24').contains(ip):returnFalse#檢查API路徑是否以/safe開頭ifnotapi_path.startswith('/safe'):returnFalse#通過所有檢查,允許訪問returnTrue```解析思路:函數(shù)首先嘗試將輸入的`ip_address`字符串轉(zhuǎn)換為`ipaddress.ip_address`對(duì)象,如果轉(zhuǎn)換失?。ǜ袷藉e(cuò)誤),則直接返回`False`。然后使用`ipaddress.ip_network('/24')`創(chuàng)建一個(gè)表示網(wǎng)段的IPv4網(wǎng)絡(luò)對(duì)象,并調(diào)用其`contains`方法檢查IP地址是否屬于該網(wǎng)段。接著,使用字符串的`startswith`方法檢查`api_path`是否以`/safe`開頭。只有兩個(gè)條件都滿足時(shí),函數(shù)才返回`True`,表示允許訪問。四、```pythonimporthmacimporthashlibdefverify_sensor_data(data,signature,sensor_id,secret_key):#構(gòu)造用于HMAC計(jì)算的完整數(shù)據(jù)(例如,可以包含傳感器ID)#這里簡(jiǎn)單地將sensor_id拼接到data后面message=data.encode()+sensor_id.encode()#使用指定的密鑰計(jì)算HMAC-SHA256computed_hmac=hmac.new(secret_key.encode(),message,hashlib.sha256).digest()#將計(jì)算出的HMAC與接收到的簽名進(jìn)行比對(duì)returnpare_digest(computed_hmac,signature)```解析思路:函數(shù)首先構(gòu)造需要計(jì)算HMAC的消息。在這個(gè)例子中,將傳感器數(shù)據(jù)`data`和傳感器ID`sensor_id`拼接起來,并使用`.encode()`轉(zhuǎn)換為字節(jié)串。然后,使用`hmac.new`創(chuàng)建一個(gè)HMAC對(duì)象,指定密鑰(`secret_key`編碼為字節(jié)串)、哈希算法(`hashlib.sha256`)和待計(jì)算的消息。調(diào)用`digest()`方法獲取計(jì)算出的HMAC字節(jié)串。最后,使用`pare_digest`(也稱為安全比較函數(shù))來比較計(jì)算出的HMAC與傳入的`signature`。`compare_digest`可以防止時(shí)序攻擊,提高比較的安全性。五、```pythonimportsocketimportsslfromcryptography.hazmat.backendsimportdefault_backendfromcryptography.hazmat.primitives.serializationimportload_pem_private_keydefestablish_tls_connection(server_address,server_port,cert_file_path,key_file_path,ca_cert_file_path):try:#加載客戶端私鑰和證書withopen(cert_file_path,"rb")asf:client_cert=f.read()withopen(key_file_path,"rb")asf:private_key=load_pem_private_key(f.read(),password=None,backend=default_backend())#創(chuàng)建SSL上下文,設(shè)置為客戶端模式context=ssl.create_default_context(ssl.Purpose.SERVER_AUTH,backend=default_backend())#加載客戶端證書context.load_cert_chain(certfile=client_cert,keyfile=key_file_path)#加載CA證書以驗(yàn)證服務(wù)器身份context.load_verify_locations(cafile=ca_cert_file_path)#開啟服務(wù)器名指示(如果需要)#context.check_hostname=True#創(chuàng)建普通socket連接sock=socket.create_connection((server_address,server_port))#使用SSL上下文包裝socket,建立TLS連接tls_sock=context.wrap_socket(sock,server_hostname=server_address)returntls_sockexcept(socket.error,ssl.SSLError)ase:print(f"TLSconnectionfailed:{e}")returnNone```解析思路:函數(shù)首先嘗試從文件中加載客戶端的私鑰和證書文件,以及服務(wù)器的CA證書文件。然后創(chuàng)建一個(gè)默認(rèn)的SSL上下文,指定用途為`ssl.Purpose.SERVER_AUTH`(客戶端連接服務(wù)器并驗(yàn)證服務(wù)器身份)。通過`load_cert_chain`將客戶端證書和私鑰加載到上下文中,通過`load_verify_locations`加載CA證書文件,用于驗(yàn)證服務(wù)器的TLS證書是否由可信CA簽發(fā)。接著,使用`socket.create_connection`創(chuàng)建一個(gè)普通的TCP連接。最后,調(diào)用`context.wrap_socket`將普通socket包裝成SSLsocket,完成TLS握手。如果在任何步驟中發(fā)生`socket.error`或`ssl.SSLError`異常,捕獲該異常并打印錯(cuò)誤信息,返回`None`表示連接失敗。六、```pythonimportyamlfromcryptography.hazmat.primitives.ciphersimportCipher,algorithms,modesfromcryptography.hazmat.backendsimportdefault_backendfromcryptography.hazmat.primitivesimportpaddingimportosdefencrypt_and_save_config(input_file_name,output_file_name,key):try:#讀取YAML配置文件withopen(input_file_name,'r',encoding='utf-8')asf:config_data=yaml.safe_load(f)#將配置數(shù)據(jù)轉(zhuǎn)換為字符串config_str=yaml.dump(config_data)#創(chuàng)建AES密鑰(確保密鑰長(zhǎng)度符合AES要求,16/24/32字節(jié))key_bytes=key.encode()iflen(key_bytes)notin(16,24,32):raiseValueError("AESkeymustbe16,24,or32byteslong.")#生成隨機(jī)初始化向量IViv=os.urandom(16)#AES塊大小為16字節(jié)#創(chuàng)建AES加密實(shí)例(CBC模式)cipher=Cipher(algorithms.AES(key_bytes),modes.CBC(iv),backend=default_backend())encryptor=cipher.encryptor()#對(duì)數(shù)據(jù)進(jìn)行填充padder=padding.PKCS7(algorithms.AES.block_size).padder()padded_data=padder.update(config_str.encode())+padder.finalize()#加密數(shù)據(jù)encrypted_data=encryptor.update(pa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026內(nèi)蒙古真金種業(yè)科技有限公司招聘7人筆試備考題庫及答案解析
- 2026上海市事業(yè)單位招聘筆試備考試題及答案解析
- 武漢大學(xué)人民醫(yī)院科研助理招聘7人考試參考題庫及答案解析
- 2026四川九華光子通信技術(shù)有限公司招聘財(cái)務(wù)會(huì)計(jì)崗1人筆試備考題庫及答案解析
- 2026年增強(qiáng)現(xiàn)實(shí)行業(yè)解決方案培訓(xùn)
- 2026上半年貴州事業(yè)單位聯(lián)考貴州省民族宗教事務(wù)委員會(huì)招聘4人考試備考題庫及答案解析
- 2026年黃山祁門縣消防救援大隊(duì)政府專職消防員招聘1名筆試備考試題及答案解析
- 2026年應(yīng)急響應(yīng)處置流程培訓(xùn)
- 2026中國海峽人才市場(chǎng)南平工作部招聘見習(xí)生筆試參考題庫及答案解析
- 2026年建筑工程管理中的質(zhì)量控制與優(yōu)化
- hop安全培訓(xùn)課件
- 固井質(zhì)量監(jiān)督制度
- 中華人民共和國職業(yè)分類大典是(專業(yè)職業(yè)分類明細(xì))
- 2025年中考英語復(fù)習(xí)必背1600課標(biāo)詞匯(30天記背)
- 資產(chǎn)管理部2025年工作總結(jié)與2025年工作計(jì)劃
- 科技成果轉(zhuǎn)化技術(shù)平臺(tái)
- 下腔靜脈濾器置入術(shù)的護(hù)理查房
- 基建人員考核管理辦法
- 2025體育與健康課程標(biāo)準(zhǔn)深度解讀與教學(xué)實(shí)踐
- 礦山救援器材管理制度
- 2025西南民族大學(xué)輔導(dǎo)員考試試題及答案
評(píng)論
0/150
提交評(píng)論