블록 서명 검증 (catapult)
6636 단어 블록체인BlockchainNEM
소개
Don't trust veryfy!
라고 잘 말하지만,
그런 말을 해도 어쨌든 괜찮습니다 ...
그렇지요. 거의 모든 사람이 스스로 확인하지 않는다고 생각합니다.
하지만 해보자. (서명 검증이지만)
이번에는 catapult에서 할 것입니다.
서명 확인할 블록
이번 서명 검증해 보는 블록은 아래와 같다. 서명되는 필드도 함께 확인하십시오.
스스로 만든 네트워크상의 데이터이므로, 테스트 넷의 데이터 등과는 전혀 관계가 없는 데이터입니다.
말할 필요도 없지만, 서명이 검증된다 = 데이터가 공개키에 묶는 비밀키의 소유자가 서명한 것을 확인할 수 있다는 의미를 가집니다. 즉, 블록을 릴레이하고 있을 때, 서명된 데이터 부분을 누군가가 변조하면 들키는 것이군요.
전자 서명은 무엇을 사용합니까?
catapult에서 사용되는 전자 서명은 ed25519
입니다. 이 ed25519
는 내부적으로 해시 함수를 사용하고 있습니다만, 그 해시 함수가 catapult라면 SHA3_512
가 되어 있습니다. NIS1(현행 NEM)이라면 Keccak_512
를 사용하고 있습니다.
덧붙여서, NIS2에 관해서는, 여기는 NIS1의 것에 맞춘다고 합니다. 어디까지나 catapult에서는 SHA3_512
를 사용하고 있다고 하는 것입니다.
ed25519
의 흐름은 이쪽.
그림 안에 HashFunction
가 있는 것을 알 수 있다고 생각합니다. 이것이 다르면 서명도 바뀌고, 검증할 수 있는 것도 할 수 없게 됩니다.
SHA3와 Keccak의 관계는 이쪽.
htps : // 코 m / 민코시 / ms / 4b8fd450f13637 6 아 1f2
확인해보기
언어는 무엇이든 좋았지만 이번에는 루비
require "ed25519_keccak"
class Deterministic_block_nis2
attr_reader :size, :signature, :pubkey_of_signer, :version, :entity_type, :height, :timestamp, :diff, :prev_block_hash, :tx_hash , :private_key
def initialize
@size = "c0000000"
@signature = "addb1df57ee20e94b43ba09b2789689be51dc80f3f3557cb7973d1fb7107ef32a7f5810d3a0c554d5d8a8dfab0e95e6ef1537ce1aafe62282d8a6186627c260d"
@pubkey_of_signer = "f59240141852736bc2a23832833eb2114ce037b0066217e09207ddfea0e08478"
@version = "0390"
@entity_type = "4381"
@height = "0200000000000000"
@timestamp = "141e9dd512000000"
@diff = "00407a10f35a0000"
@prev_block_hash = "9050e352bb5bf321522a7067b78c87c3c3cd5c7c7fbc1c96fae82f6d73974452"
@tx_hash = "0000000000000000000000000000000000000000000000000000000000000000"
end
def get_data_buffer
data_buffer = @version + @entity_type + @height + @timestamp + @diff + @prev_block_hash + @tx_hash
return data_buffer
end
end
nis2_block = Deterministic_block_nis2.new
publickey = nis2_block.pubkey_of_signer
message = nis2_block.get_data_buffer
signature = nis2_block.signature
ed25519 = Ed25519Keccak::SHA3_512.new
is_verify = ed25519.verify( publickey, message , signature, :hex )
puts( "is verify ? : " + is_verify.to_s )
실행하면 결과 true가 표시됩니다.
도서관 없음
루비를 사용했는데 깊은 의미는 없습니다. 반복되겠지만...
catapult에서 사용되는 전자 서명은 ed25519
입니다. 이 ed25519
는 내부적으로 해시 함수를 사용하고 있습니다만, 그 해시 함수가 catapult라면 SHA3_512
가 되어 있습니다. NIS1(현행 NEM)이라면 Keccak_512
를 사용하고 있습니다.
여기서 어려운 일은 루비의 젬을 찾는 것입니다. SHA2_512
그렇다면 곧 발견되었습니다.
그래서 다른 언어를 사용할까라고 생각했는데, 어차피라면 여러가지 공부가 만들어 만들어 보았습니다. (구현 자체는 RFC8032
안에있는 python 코드를 ruby로 다시 쓴 것입니다)
암호는 스스로 만지고 싶지 않아요. 이 근처가 NEM의 매운 곳일지도 모릅니다.
참고
Reference
이 문제에 관하여(블록 서명 검증 (catapult)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mincoshi/items/fbcb087ba77846db37a0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번 서명 검증해 보는 블록은 아래와 같다. 서명되는 필드도 함께 확인하십시오.
스스로 만든 네트워크상의 데이터이므로, 테스트 넷의 데이터 등과는 전혀 관계가 없는 데이터입니다.
말할 필요도 없지만, 서명이 검증된다 = 데이터가 공개키에 묶는 비밀키의 소유자가 서명한 것을 확인할 수 있다는 의미를 가집니다. 즉, 블록을 릴레이하고 있을 때, 서명된 데이터 부분을 누군가가 변조하면 들키는 것이군요.
전자 서명은 무엇을 사용합니까?
catapult에서 사용되는 전자 서명은 ed25519
입니다. 이 ed25519
는 내부적으로 해시 함수를 사용하고 있습니다만, 그 해시 함수가 catapult라면 SHA3_512
가 되어 있습니다. NIS1(현행 NEM)이라면 Keccak_512
를 사용하고 있습니다.
덧붙여서, NIS2에 관해서는, 여기는 NIS1의 것에 맞춘다고 합니다. 어디까지나 catapult에서는 SHA3_512
를 사용하고 있다고 하는 것입니다.
ed25519
의 흐름은 이쪽.
그림 안에 HashFunction
가 있는 것을 알 수 있다고 생각합니다. 이것이 다르면 서명도 바뀌고, 검증할 수 있는 것도 할 수 없게 됩니다.
SHA3와 Keccak의 관계는 이쪽.
htps : // 코 m / 민코시 / ms / 4b8fd450f13637 6 아 1f2
확인해보기
언어는 무엇이든 좋았지만 이번에는 루비
require "ed25519_keccak"
class Deterministic_block_nis2
attr_reader :size, :signature, :pubkey_of_signer, :version, :entity_type, :height, :timestamp, :diff, :prev_block_hash, :tx_hash , :private_key
def initialize
@size = "c0000000"
@signature = "addb1df57ee20e94b43ba09b2789689be51dc80f3f3557cb7973d1fb7107ef32a7f5810d3a0c554d5d8a8dfab0e95e6ef1537ce1aafe62282d8a6186627c260d"
@pubkey_of_signer = "f59240141852736bc2a23832833eb2114ce037b0066217e09207ddfea0e08478"
@version = "0390"
@entity_type = "4381"
@height = "0200000000000000"
@timestamp = "141e9dd512000000"
@diff = "00407a10f35a0000"
@prev_block_hash = "9050e352bb5bf321522a7067b78c87c3c3cd5c7c7fbc1c96fae82f6d73974452"
@tx_hash = "0000000000000000000000000000000000000000000000000000000000000000"
end
def get_data_buffer
data_buffer = @version + @entity_type + @height + @timestamp + @diff + @prev_block_hash + @tx_hash
return data_buffer
end
end
nis2_block = Deterministic_block_nis2.new
publickey = nis2_block.pubkey_of_signer
message = nis2_block.get_data_buffer
signature = nis2_block.signature
ed25519 = Ed25519Keccak::SHA3_512.new
is_verify = ed25519.verify( publickey, message , signature, :hex )
puts( "is verify ? : " + is_verify.to_s )
실행하면 결과 true가 표시됩니다.
도서관 없음
루비를 사용했는데 깊은 의미는 없습니다. 반복되겠지만...
catapult에서 사용되는 전자 서명은 ed25519
입니다. 이 ed25519
는 내부적으로 해시 함수를 사용하고 있습니다만, 그 해시 함수가 catapult라면 SHA3_512
가 되어 있습니다. NIS1(현행 NEM)이라면 Keccak_512
를 사용하고 있습니다.
여기서 어려운 일은 루비의 젬을 찾는 것입니다. SHA2_512
그렇다면 곧 발견되었습니다.
그래서 다른 언어를 사용할까라고 생각했는데, 어차피라면 여러가지 공부가 만들어 만들어 보았습니다. (구현 자체는 RFC8032
안에있는 python 코드를 ruby로 다시 쓴 것입니다)
암호는 스스로 만지고 싶지 않아요. 이 근처가 NEM의 매운 곳일지도 모릅니다.
참고
Reference
이 문제에 관하여(블록 서명 검증 (catapult)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mincoshi/items/fbcb087ba77846db37a0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
언어는 무엇이든 좋았지만 이번에는 루비
require "ed25519_keccak"
class Deterministic_block_nis2
attr_reader :size, :signature, :pubkey_of_signer, :version, :entity_type, :height, :timestamp, :diff, :prev_block_hash, :tx_hash , :private_key
def initialize
@size = "c0000000"
@signature = "addb1df57ee20e94b43ba09b2789689be51dc80f3f3557cb7973d1fb7107ef32a7f5810d3a0c554d5d8a8dfab0e95e6ef1537ce1aafe62282d8a6186627c260d"
@pubkey_of_signer = "f59240141852736bc2a23832833eb2114ce037b0066217e09207ddfea0e08478"
@version = "0390"
@entity_type = "4381"
@height = "0200000000000000"
@timestamp = "141e9dd512000000"
@diff = "00407a10f35a0000"
@prev_block_hash = "9050e352bb5bf321522a7067b78c87c3c3cd5c7c7fbc1c96fae82f6d73974452"
@tx_hash = "0000000000000000000000000000000000000000000000000000000000000000"
end
def get_data_buffer
data_buffer = @version + @entity_type + @height + @timestamp + @diff + @prev_block_hash + @tx_hash
return data_buffer
end
end
nis2_block = Deterministic_block_nis2.new
publickey = nis2_block.pubkey_of_signer
message = nis2_block.get_data_buffer
signature = nis2_block.signature
ed25519 = Ed25519Keccak::SHA3_512.new
is_verify = ed25519.verify( publickey, message , signature, :hex )
puts( "is verify ? : " + is_verify.to_s )
실행하면 결과 true가 표시됩니다.
도서관 없음
루비를 사용했는데 깊은 의미는 없습니다. 반복되겠지만...
catapult에서 사용되는 전자 서명은 ed25519
입니다. 이 ed25519
는 내부적으로 해시 함수를 사용하고 있습니다만, 그 해시 함수가 catapult라면 SHA3_512
가 되어 있습니다. NIS1(현행 NEM)이라면 Keccak_512
를 사용하고 있습니다.
여기서 어려운 일은 루비의 젬을 찾는 것입니다. SHA2_512
그렇다면 곧 발견되었습니다.
그래서 다른 언어를 사용할까라고 생각했는데, 어차피라면 여러가지 공부가 만들어 만들어 보았습니다. (구현 자체는 RFC8032
안에있는 python 코드를 ruby로 다시 쓴 것입니다)
암호는 스스로 만지고 싶지 않아요. 이 근처가 NEM의 매운 곳일지도 모릅니다.
참고
Reference
이 문제에 관하여(블록 서명 검증 (catapult)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mincoshi/items/fbcb087ba77846db37a0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(블록 서명 검증 (catapult)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mincoshi/items/fbcb087ba77846db37a0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)