開発機と量産機で鍵を変える

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@145 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
N2614 2011-03-17 04:46:31 +00:00
parent a40aac9306
commit 655e517278
5 changed files with 94 additions and 13 deletions

View File

@ -18,6 +18,7 @@
#include <cwchar>
#include <string>
#include <cstdlib>
#include <nn/os/os_Private.h>
#include <nn/fs/CTR/fs_ArchiveTypesForSystem.h>
#include <nn/fs/CTR/MPCore/fs_FileSystemBasePrivate.h>
#include <nn/cfg/CTR/cfg_Api.h>
@ -239,7 +240,15 @@ void WriteIvs()
nn::crypto::SwAesCtrContext swAesCtrContest;
swAesCtrContest.Initialize(common::iv, common::key, sizeof(common::key));
if(nn::os::IsRunOnDevelopmentHardware())
{
swAesCtrContest.Initialize(common::devIv, common::devKey, sizeof(common::devKey));
}
else
{
swAesCtrContest.Initialize(common::prodIv, common::prodKey, sizeof(common::prodKey));
}
swAesCtrContest.Encrypt(enc, ivs, size);
s_SdWriter.WriteBufWithCmac(common::IVS_PATHNAME, enc, size);

View File

@ -14,6 +14,7 @@
*---------------------------------------------------------------------------*/
#include <nn.h>
#include <nn/os/os_Private.h>
#include <nn/fs/CTR/fs_ArchiveTypesForSystem.h>
#include <nn/fs/CTR/MPCore/fs_FileSystemBasePrivate.h>
#include <nn/cfg/CTR/cfg_ApiInit.h>
@ -606,7 +607,15 @@ nn::Result ImportIvs()
nn::crypto::Initialize();
nn::crypto::SwAesCtrContext swAesCtrContest;
swAesCtrContest.Initialize(common::iv, common::key, sizeof(common::key));
if(nn::os::IsRunOnDevelopmentHardware())
{
swAesCtrContest.Initialize(common::devIv, common::devKey, sizeof(common::devKey));
}
else
{
swAesCtrContest.Initialize(common::prodIv, common::prodKey, sizeof(common::prodKey));
}
swAesCtrContest.Decrypt(dec, enc, readSize);
// IVS書き込み

View File

@ -20,23 +20,43 @@
namespace common
{
const bit8 key[AES_KEY_SIZE] NN_ATTRIBUTE_ALIGN(4) =
const bit8 devKey[AES_KEY_SIZE] NN_ATTRIBUTE_ALIGN(4) =
{
0x81, 0x35, 0xc6, 0x54, 0x19, 0x1a, 0x47, 0x2a,
0x6b, 0x78, 0xbe, 0x25, 0x90, 0xf6, 0xee, 0x74
};
const bit8 cmacKey[AES_KEY_SIZE] =
const bit8 devCmacKey[AES_KEY_SIZE] =
{
0x87, 0xdd, 0xc6, 0xd6, 0xf2, 0xe0, 0x2c, 0xa6,
0x04, 0x21, 0x9c, 0x5e, 0x33, 0x8c, 0x3d, 0xaa
};
const bit8 iv[AES_BLOCK_SIZE] NN_ATTRIBUTE_ALIGN(4) =
const bit8 devIv[AES_BLOCK_SIZE] NN_ATTRIBUTE_ALIGN(4) =
{
0xdf, 0x0f, 0xf9, 0x1b, 0x34, 0x47, 0x70, 0x7f,
0x7d, 0x06, 0x85, 0xe6, 0xe7, 0xb6, 0x4e, 0xe9
0xdf, 0x0f, 0xf9, 0x1b, 0x34, 0x47, 0x70, 0x7f,
0x7d, 0x06, 0x85, 0xe6, 0xe7, 0xb6, 0x4e, 0xe9
};
const bit8 prodKey[AES_KEY_SIZE] NN_ATTRIBUTE_ALIGN(4) =
{
0x64, 0x02, 0x6d, 0xbd, 0x9f, 0xb6, 0x62, 0x39,
0x86, 0x90, 0x67, 0x8a, 0xe2, 0xfa, 0xe1, 0x6e
};
const bit8 prodCmacKey[AES_KEY_SIZE] =
{
0xdf, 0x3c, 0x58, 0xeb, 0xeb, 0xbf, 0x45, 0x6d,
0xc9, 0xbe, 0xe3, 0x10, 0xe2, 0x23, 0xfc, 0x30
};
const bit8 prodIv[AES_BLOCK_SIZE] NN_ATTRIBUTE_ALIGN(4) =
{
0xe4, 0xcf, 0x58, 0xe5, 0xc9, 0xd6, 0xac, 0x7d,
0xf1, 0xb9, 0x82, 0xf9, 0xa2, 0xd8, 0xda, 0x7b
};
}
#endif /* AES_DEFINE_H_ */

View File

@ -15,6 +15,8 @@
#include <vector>
#include <nn/os/os_Private.h>
#include <nn/crypto/crypto_AesCmac.h>
#include <nn/crypto/crypto_SwAesCtrContext.h>
#include <nn/crypto/crypto_Sha256.h>
@ -212,7 +214,14 @@ bool CopyDirectory(const wchar_t * from_path, const wchar_t * to_path, void* buf
}
nn::crypto::SwAesCtrContext swAesCtrContext;
swAesCtrContext.Initialize(iv, common::key, sizeof(key));
if(nn::os::IsRunOnDevelopmentHardware())
{
swAesCtrContext.Initialize(devIv, common::devKey, sizeof(devKey));
}
else
{
swAesCtrContext.Initialize(prodIv, common::prodKey, sizeof(prodKey));
}
size_t totalReadSize = 0;
nn::crypto::Sha256Context context;
@ -297,8 +306,16 @@ bool CopyDirectory(const wchar_t * from_path, const wchar_t * to_path, void* buf
context.GetHash(sha256Hash);
bit8 cmac[nn::crypto::AES_CMAC_MAC_SIZE];
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash,
nn::crypto::Sha256Context::HASH_SIZE, common::cmacKey);
if(nn::os::IsRunOnDevelopmentHardware())
{
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash,
nn::crypto::Sha256Context::HASH_SIZE, common::devCmacKey);
}
else
{
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash,
nn::crypto::Sha256Context::HASH_SIZE, common::prodCmacKey);
}
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
result = to_file.TryWrite(&writesize, cmac, sizeof(cmac));
@ -431,7 +448,15 @@ bool CalculateAndCompareCmac(nn::crypto::Sha256Context* context, bit8* sdCmac)
context->GetHash(sha256Hash);
context->Finalize();
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, sizeof(sha256Hash), common::cmacKey);
if(nn::os::IsRunOnDevelopmentHardware())
{
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, sizeof(sha256Hash), common::devCmacKey);
}
else
{
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, sizeof(sha256Hash), common::prodCmacKey);
}
if (result.IsFailure())
{
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);

View File

@ -18,6 +18,8 @@
#include "CommonLogger.h"
#include "Aes_define.h"
#include <nn/os/os_Private.h>
#include <nn/crypto/crypto_AesCmac.h>
#include <nn/crypto/crypto_SwAesCtrContext.h>
#include <nn/crypto/crypto_Sha256.h>
@ -122,7 +124,15 @@ nn::Result SdReaderWriter::WriteBufWithCmac(const wchar_t* path, void* buf, size
nn::crypto::CalculateSha256(sha256Hash, buf, size);
bit8 cmac[nn::crypto::AES_CMAC_MAC_SIZE];
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, nn::crypto::Sha256Context::HASH_SIZE, common::cmacKey);
if(nn::os::IsRunOnDevelopmentHardware())
{
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, nn::crypto::Sha256Context::HASH_SIZE, common::devCmacKey);
}
else
{
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, nn::crypto::Sha256Context::HASH_SIZE, common::prodCmacKey);
}
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
s32 writeSize;
@ -212,7 +222,15 @@ nn::Result SdReaderWriter::ReadBufWithCmac(const wchar_t* path, void* buf, size_
nn::crypto::CalculateSha256(sha256Hash, buf, *totalSize);
bit8 cmac[nn::crypto::AES_CMAC_MAC_SIZE];
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, nn::crypto::Sha256Context::HASH_SIZE, common::cmacKey);
if(nn::os::IsRunOnDevelopmentHardware())
{
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, nn::crypto::Sha256Context::HASH_SIZE, common::devCmacKey);
}
else
{
result = nn::crypto::CalculateAesCmacSw(cmac, sha256Hash, nn::crypto::Sha256Context::HASH_SIZE, common::prodCmacKey);
}
COMMON_LOGGER_RESULT_IF_FAILED_WITH_LINE(result);
if(std::memcmp(reinterpret_cast<bit8*>(buf) + *totalSize, cmac, sizeof(cmac)) != 0)