[steemdev] 메모에 암호화 적용하기

in #steemdev6 years ago

memo_enc.png


메모 암호화 적용방법 : 메모 앞에 # 만 붙이면 됨
하지만... 현재 버그로 인해 동작하지 않음 ㅜㅜ 분명 1~2주전 즈음에는 잘되었는데 흑흑...

메모에 암호화란 ?

  • 나의 메모 개인키와 상대방의 메모 공개키 쌍을 이용하여 암호화 복화를 처리하는 방법 입니다.

특징 및 활용

  • 내가 작성하여 상대방에게 보내면 해당 메모는 나와 상대방 만 볼 수 있습니다. (좋지요 ㅋ)
  • 이러한 특징으로 중요 정보 거래 시 배송 정보, 쿠폰번호 전송 등에 활용하면 굳이 개인채팅(카톡, 텔레그램 등)을 사용하지 않아도 됩니다.

적용 방법

  • 메모를 남길 때 메모 맨 앞 부분에 #을 추가하여 남기면 됨.
  • 스팀잇 사이트에서는 현재(18.09.24) 버그로 인해 동작하지는 않음.

프로그램으로 적용하는 방법

  • steemjs 를 활용
  • privateWifAccountA : A 계정의 MEMO 개인키
  • publicWifAccountB : B 계정의 MEMO 공개키
  • privateWifAccountAOrB : A 또는 B 계정의 MEMO 개인키
  • 메모는 반드시 #으로 시작해야 됩니다.

암호화

let encoded = steem.memo.encode(privateWifAccountA, publicWifAccountB, `#This is my private message`);

복호화

let decoded = steem.memo.decode(privateWifAccountAOrB, encoded);

프로그램 예제

// 설정 정보를 읽어들인다 
require('dotenv').config();

const steem = require('steem');

const MY_ACC_NAME = process.env.MY_ACC_NAME;        // 내 계정명
const MY_PRI_ACTIVE = process.env.MY_PRI_ACTIVE;    // 내 계정의 ACTIVE 개인키
const MY_PRI_MEMO = process.env.MY_PRI_MEMO;        // 내 계정의 MEMO 개인키

async function test(){

    let who = 'wdev';   // 받는 사람
    let accs = await steem.api.getAccountsAsync([who]); // 받는이 계정에서 메모 공개키 정보 확보
    let send_pub_memo = accs[0].memo_key;
    let amount = '0.001 STEEM';
    let memo = `#이 메모는 보내는/받는 사람에게만 보여져요.`; 

    // 파라미터 : 보내는 이 MEMO 개인키, 받는 이 MEMO 공개키, 메모 (#으로 시작해야 됨)
    let encoded = steem.memo.encode(MY_PRI_MEMO, send_pub_memo, memo);
    console.log('memo', memo);
    console.log('encoded', encoded);

    // 파라미터 : 보내는 이 ACTIVE 개인키, 보내는 이 계정명, 받는이 계정명, 금액 
    let result = await steem.broadcast.transferAsync(MY_PRI_ACTIVE, MY_ACC_NAME, who, amount, encoded);

    console.log(result);
}
test();

결과 : 정상적으로 되면 steemit.com 에서 보여져야 되나 현재는 복호화가 안되서 볼 수 없음 ㅋ

memo #이 메모는 보내는/받는 사람에게만 보여져요.
encoded #2m9z2MwEvWwt9LHbAGLcE5EMbTE5bkcvocjeNLimCueuAwPxPohj11ugFbpZ8ZBmWFLYa3XpsgGkR8FDMxYZmaDF7ncJaPG8H2wQxZro5qyiHq1yy3pesrtiN4NeKFVHHDqGw7wcmavyu5Pd1bo4oizLbUbvQCJrQp1qARoUzZLpJ1zftLDkcgTm7Xsc8x9iYHT
{ id: '70043e6d254bcf89a29e11a87142d686ae0f740f',
  block_num: 26226087,
  trx_num: 37,
  expired: false,
  ref_block_num: 11666,
  ref_block_prefix: 237636650,
  expiration: '2018-09-24T13:34:48',
  operations: [ [ 'transfer', [Object] ] ],
  extensions: [],
  signatures:
   [ '1f1624c8866f8271a516c211f920a5d053644e87dc87c2006a10765e66fe31d4043ba08b892b9ad7d78f252191a0e0599cb16ad23b3fca1043cb88104a6042b068' ] }

memo_res.png


[그림2] 원래는 steemit.com 에서 암호화 한 경우 해당 메모는 나와 받는 이만 볼 수 있고 다른 사람들에게는 위 이미지 처럼 내용이 보여지지 않음. ( 18.09.24 현재는 버그로 해당 기능 동작하지 않음 )

memo_ee.png


[그림3] 메모에 암호화 적용을 하여 steemd 에서는 내용을 확인 할 수 없다.

주의

  • 현재는 암복호화가 https://steemit.com 에서 정상 동작하지 않고 있습니다.
  • 저번 HF20 적용 후 HF19로 원복하여 오류가 발생된 시점 이후로 안되는 것으로 추정
  • 이것 뿐만 아니라 transaction_id 로 거래 정보 가져오는 것도 안됨 (현재는 block_no, trx_idx 를 조합해서 거래정보를 확인해야 됨)
  • HF20 적용되면 다시 테스트 후 글을 다시 올려보도록 하겠습니다.
  • 프로그램상으로는 암호화 및 복호화는 가능함 (하지만 사이트에서 볼 수 없으니 무용지물)
  • STEEMIT API 는 각성해라 ! ㅜㅜ 메뉴얼좀 잘 만들어 주고 API 지원 여부도 잘해주고, 되던게 어떤날 부터 갑자기 안됨 ㅋㅋ 특히 condensor_api ㅋ

참조링크

Sort:  

오 스팀 지갑 메모에 # 으로 시작하면 거래당사자들의 공개키 쌍을 이용해 암호화되어, 거래 당사자들만 볼수 있나 보군요. 그런 말을 본 것 같았는데, 남들은 어찌 못보나를 몰랐는데, 이제 명쾌하게 알겠네요. @wonsama 님은 지니어스.. ??

그런데, 공개키 쌍으로 암호화, 복호화 한다면, 공개키를 알 수 있는 다른 사람들도 알수 있게되는 것 아닌가요?

Coin Marketplace

STEEM 0.19
TRX 0.15
JST 0.029
BTC 62912.13
ETH 2544.21
USDT 1.00
SBD 2.84